Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
9aa992c2
K
kotlin
项目概览
硅谷海盗
/
kotlin
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kotlin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9aa992c2
编写于
3月 13, 2012
作者:
A
Alex Tkachman
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix for KT-1568 1.javaClass
上级
dc37fca1
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
50 addition
and
5 deletion
+50
-5
compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java
.../backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java
+1
-0
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java
...rg/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java
+1
-0
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/JavaClassFunction.java
...g/jetbrains/jet/codegen/intrinsics/JavaClassFunction.java
+2
-1
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/JavaClassProperty.java
...g/jetbrains/jet/codegen/intrinsics/JavaClassProperty.java
+35
-1
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
...tbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
+3
-3
compiler/testData/codegen/regressions/kt1568.kt
compiler/testData/codegen/regressions/kt1568.kt
+4
-0
compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java
compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java
+4
-0
未找到文件。
compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java
浏览文件 @
9aa992c2
...
...
@@ -53,6 +53,7 @@ public class JetTypeMapper {
public
static
final
Type
JL_STRING_TYPE
=
Type
.
getObjectType
(
"java/lang/String"
);
public
static
final
Type
JL_CHAR_SEQUENCE_TYPE
=
Type
.
getObjectType
(
"java/lang/CharSequence"
);
private
static
final
Type
JL_COMPARABLE_TYPE
=
Type
.
getObjectType
(
"java/lang/Comparable"
);
public
static
final
Type
JL_CLASS_TYPE
=
Type
.
getObjectType
(
"java/lang/Class"
);
public
static
final
Type
ARRAY_GENERIC_TYPE
=
Type
.
getType
(
Object
[].
class
);
...
...
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java
浏览文件 @
9aa992c2
...
...
@@ -73,6 +73,7 @@ public class IntrinsicMethods {
myStdLib
=
stdlib
;
namedMethods
.
put
(
"\"kotlin.javaClass.function\""
,
new
JavaClassFunction
());
namedMethods
.
put
(
"\"kotlin.javaClass.property\""
,
new
JavaClassProperty
());
List
<
String
>
primitiveCastMethods
=
OperatorConventions
.
NUMBER_CONVERSIONS
.
asList
();
for
(
String
method
:
primitiveCastMethods
)
{
...
...
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/JavaClassFunction.java
浏览文件 @
9aa992c2
...
...
@@ -19,6 +19,7 @@ package org.jetbrains.jet.codegen.intrinsics;
import
com.intellij.psi.PsiElement
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.jet.codegen.ExpressionCodegen
;
import
org.jetbrains.jet.codegen.JetTypeMapper
;
import
org.jetbrains.jet.codegen.StackValue
;
import
org.jetbrains.jet.lang.descriptors.CallableDescriptor
;
import
org.jetbrains.jet.lang.psi.JetCallExpression
;
...
...
@@ -42,6 +43,6 @@ public class JavaClassFunction implements IntrinsicMethod {
CallableDescriptor
resultingDescriptor
=
resolvedCall
.
getResultingDescriptor
();
Type
type
=
codegen
.
getTypeMapper
().
mapType
(
resultingDescriptor
.
getReturnType
().
getArguments
().
get
(
0
).
getType
());
v
.
aconst
(
type
);
return
StackValue
.
onStack
(
type
);
return
StackValue
.
onStack
(
JetTypeMapper
.
JL_CLASS_TYPE
);
}
}
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/JavaClassProperty.java
浏览文件 @
9aa992c2
...
...
@@ -19,8 +19,13 @@ package org.jetbrains.jet.codegen.intrinsics;
import
com.intellij.psi.PsiElement
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.jet.codegen.ExpressionCodegen
;
import
org.jetbrains.jet.codegen.JetTypeMapper
;
import
org.jetbrains.jet.codegen.StackValue
;
import
org.jetbrains.jet.lang.descriptors.CallableDescriptor
;
import
org.jetbrains.jet.lang.psi.JetCallExpression
;
import
org.jetbrains.jet.lang.psi.JetExpression
;
import
org.jetbrains.jet.lang.resolve.BindingContext
;
import
org.jetbrains.jet.lang.resolve.calls.ResolvedCall
;
import
org.objectweb.asm.Type
;
import
org.objectweb.asm.commons.InstructionAdapter
;
...
...
@@ -32,6 +37,35 @@ import java.util.List;
public
class
JavaClassProperty
implements
IntrinsicMethod
{
@Override
public
StackValue
generate
(
ExpressionCodegen
codegen
,
InstructionAdapter
v
,
Type
expectedType
,
@Nullable
PsiElement
element
,
@Nullable
List
<
JetExpression
>
arguments
,
StackValue
receiver
)
{
return
null
;
receiver
.
put
(
receiver
.
type
,
v
);
switch
(
receiver
.
type
.
getSort
())
{
case
Type
.
BOOLEAN
:
v
.
getstatic
(
"java/lang/Boolean"
,
"TYPE"
,
"Ljava/lang/Class;"
);
break
;
case
Type
.
BYTE
:
v
.
getstatic
(
"java/lang/Byte"
,
"TYPE"
,
"Ljava/lang/Class;"
);
break
;
case
Type
.
SHORT
:
v
.
getstatic
(
"java/lang/Short"
,
"TYPE"
,
"Ljava/lang/Class;"
);
break
;
case
Type
.
CHAR
:
v
.
getstatic
(
"java/lang/Character"
,
"TYPE"
,
"Ljava/lang/Class;"
);
break
;
case
Type
.
INT
:
v
.
getstatic
(
"java/lang/Integer"
,
"TYPE"
,
"Ljava/lang/Class;"
);
break
;
case
Type
.
LONG
:
v
.
getstatic
(
"java/lang/Long"
,
"TYPE"
,
"Ljava/lang/Class;"
);
break
;
case
Type
.
FLOAT
:
v
.
getstatic
(
"java/lang/Float"
,
"TYPE"
,
"Ljava/lang/Class;"
);
break
;
case
Type
.
DOUBLE
:
v
.
getstatic
(
"java/lang/Double"
,
"TYPE"
,
"Ljava/lang/Class;"
);
break
;
default
:
v
.
invokevirtual
(
"java/lang/Object"
,
"getClass"
,
"()Ljava/lang/Class;"
);
}
return
StackValue
.
onStack
(
JetTypeMapper
.
JL_CLASS_TYPE
);
}
}
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
浏览文件 @
9aa992c2
...
...
@@ -1204,7 +1204,7 @@ public class JavaDescriptorResolver {
PropertyDescriptor
propertyDescriptor
=
new
PropertyDescriptor
(
owner
,
Collections
.<
AnnotationDescriptor
>
emptyList
(
),
resolveAnnotations
(
anyMember
.
getMember
().
psiMember
),
modality
,
resolveVisibilityFromPsiModifiers
(
anyMember
.
getMember
().
psiMember
),
isVar
,
...
...
@@ -1215,10 +1215,10 @@ public class JavaDescriptorResolver {
PropertyGetterDescriptor
getterDescriptor
=
null
;
PropertySetterDescriptor
setterDescriptor
=
null
;
if
(
members
.
getter
!=
null
)
{
getterDescriptor
=
new
PropertyGetterDescriptor
(
propertyDescriptor
,
Collections
.<
AnnotationDescriptor
>
emptyList
(
),
Modality
.
OPEN
,
Visibility
.
PUBLIC
,
true
,
false
,
CallableMemberDescriptor
.
Kind
.
DECLARATION
);
getterDescriptor
=
new
PropertyGetterDescriptor
(
propertyDescriptor
,
resolveAnnotations
(
members
.
getter
.
getMember
().
psiMember
),
Modality
.
OPEN
,
Visibility
.
PUBLIC
,
true
,
false
,
CallableMemberDescriptor
.
Kind
.
DECLARATION
);
}
if
(
members
.
setter
!=
null
)
{
setterDescriptor
=
new
PropertySetterDescriptor
(
propertyDescriptor
,
Collections
.<
AnnotationDescriptor
>
emptyList
(
),
Modality
.
OPEN
,
Visibility
.
PUBLIC
,
true
,
false
,
CallableMemberDescriptor
.
Kind
.
DECLARATION
);
setterDescriptor
=
new
PropertySetterDescriptor
(
propertyDescriptor
,
resolveAnnotations
(
members
.
setter
.
getMember
().
psiMember
),
Modality
.
OPEN
,
Visibility
.
PUBLIC
,
true
,
false
,
CallableMemberDescriptor
.
Kind
.
DECLARATION
);
}
propertyDescriptor
.
initialize
(
getterDescriptor
,
setterDescriptor
);
...
...
compiler/testData/codegen/regressions/kt1568.kt
0 → 100644
浏览文件 @
9aa992c2
fun
box
()
:
String
{
val
i
=
1
return
if
(
i
.
javaClass
.
getSimpleName
()
==
"int"
)
"OK"
else
"fail"
}
\ No newline at end of file
compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java
浏览文件 @
9aa992c2
...
...
@@ -120,4 +120,8 @@ public class StdlibTest extends CodegenTestCase {
public
void
testKt1406
()
throws
Exception
{
blackBoxFile
(
"regressions/kt1406.kt"
);
}
public
void
testKt1568
()
throws
Exception
{
blackBoxFile
(
"regressions/kt1568.kt"
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录