Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
7e2e46ec
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,发现更多精彩内容 >>
提交
7e2e46ec
编写于
6月 03, 2011
作者:
A
Andrey Breslav
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
JET-61 Support class objects
JET-83 Interpret Java static methods as class objects' members
上级
4884af38
变更
8
展开全部
隐藏空白更改
内联
并排
Showing
8 changed file
with
441 addition
and
423 deletion
+441
-423
idea/src/org/jetbrains/jet/lang/resolve/java/JavaClassDescriptor.java
.../jetbrains/jet/lang/resolve/java/JavaClassDescriptor.java
+17
-1
idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
...tbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
+14
-0
idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java
idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java
+1
-1
idea/testData/psi/SimpleClassMembers.txt
idea/testData/psi/SimpleClassMembers.txt
+274
-284
idea/testData/psi/examples/PolymorphicClassObjects.txt
idea/testData/psi/examples/PolymorphicClassObjects.txt
+57
-58
idea/testData/psi/examples/UpdateOperation.txt
idea/testData/psi/examples/UpdateOperation.txt
+76
-77
idea/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java
...ests/org/jetbrains/jet/codegen/ControlStructuresTest.java
+1
-1
idea/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java
idea/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java
+1
-1
未找到文件。
idea/src/org/jetbrains/jet/lang/resolve/java/JavaClassDescriptor.java
浏览文件 @
7e2e46ec
...
...
@@ -6,6 +6,7 @@ import org.jetbrains.jet.lang.resolve.JetScope;
import
org.jetbrains.jet.lang.resolve.SubstitutingScope
;
import
org.jetbrains.jet.lang.types.*
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -16,6 +17,7 @@ public class JavaClassDescriptor extends MutableDeclarationDescriptor implements
private
TypeConstructor
typeConstructor
;
private
JavaClassMembersScope
unsubstitutedMemberScope
;
private
JetType
classObjectType
;
private
final
WritableFunctionGroup
constructors
=
new
WritableFunctionGroup
(
"<init>"
);
public
JavaClassDescriptor
(
DeclarationDescriptor
containingDeclaration
)
{
...
...
@@ -30,6 +32,20 @@ public class JavaClassDescriptor extends MutableDeclarationDescriptor implements
this
.
unsubstitutedMemberScope
=
memberScope
;
}
public
void
setClassObjectMemberScope
(
JavaClassMembersScope
memberScope
)
{
classObjectType
=
new
JetTypeImpl
(
new
TypeConstructorImpl
(
JavaDescriptorResolver
.
JAVA_CLASS_OBJECT
,
Collections
.<
Annotation
>
emptyList
(),
true
,
"Class object emulation for "
+
getName
(),
Collections
.<
TypeParameterDescriptor
>
emptyList
(),
Collections
.<
JetType
>
emptyList
()
),
memberScope
);
}
public
void
addConstructor
(
ConstructorDescriptor
constructorDescriptor
)
{
this
.
constructors
.
addFunction
(
constructorDescriptor
);
}
...
...
@@ -89,7 +105,7 @@ public class JavaClassDescriptor extends MutableDeclarationDescriptor implements
@Override
public
JetType
getClassObjectType
()
{
return
null
;
// TODO : static members as class object members
return
classObjectType
;
}
@Override
...
...
idea/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
浏览文件 @
7e2e46ec
...
...
@@ -30,6 +30,19 @@ public class JavaDescriptorResolver {
}
};
/*package*/
static
final
DeclarationDescriptor
JAVA_CLASS_OBJECT
=
new
DeclarationDescriptorImpl
(
null
,
Collections
.<
Annotation
>
emptyList
(),
"<java_class_object_emulation>"
)
{
@NotNull
@Override
public
DeclarationDescriptor
substitute
(
TypeSubstitutor
substitutor
)
{
throw
new
UnsupportedOperationException
();
// TODO
}
@Override
public
<
R
,
D
>
R
accept
(
DeclarationDescriptorVisitor
<
R
,
D
>
visitor
,
D
data
)
{
return
visitor
.
visitDeclarationDescriptor
(
this
,
data
);
}
};
protected
final
Map
<
String
,
ClassDescriptor
>
classDescriptorCache
=
new
HashMap
<
String
,
ClassDescriptor
>();
protected
final
Map
<
PsiTypeParameter
,
TypeParameterDescriptor
>
typeParameterDescriptorCache
=
Maps
.
newHashMap
();
protected
final
Map
<
PsiMethod
,
FunctionDescriptor
>
methodDescriptorCache
=
Maps
.
newHashMap
();
...
...
@@ -91,6 +104,7 @@ public class JavaDescriptorResolver {
));
classDescriptorCache
.
put
(
psiClass
.
getQualifiedName
(),
classDescriptor
);
classDescriptor
.
setUnsubstitutedMemberScope
(
new
JavaClassMembersScope
(
classDescriptor
,
psiClass
,
semanticServices
,
false
));
classDescriptor
.
setClassObjectMemberScope
(
new
JavaClassMembersScope
(
classDescriptor
,
psiClass
,
semanticServices
,
true
));
// UGLY HACK
supertypes
.
addAll
(
getSupertypes
(
psiClass
));
...
...
idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java
浏览文件 @
7e2e46ec
...
...
@@ -713,7 +713,7 @@ public class JetTypeInferrer {
result
=
classObjectType
;
}
else
{
trace
.
getErrorHandler
().
genericError
(
expression
.
getNode
(),
"
This class
does not have a class object"
);
trace
.
getErrorHandler
().
genericError
(
expression
.
getNode
(),
"
Classifier "
+
classifier
.
getName
()
+
"
does not have a class object"
);
}
trace
.
recordReferenceResolution
(
expression
,
classifier
);
return
;
...
...
idea/testData/psi/SimpleClassMembers.txt
浏览文件 @
7e2e46ec
此差异已折叠。
点击以展开。
idea/testData/psi/examples/PolymorphicClassObjects.txt
浏览文件 @
7e2e46ec
...
...
@@ -134,65 +134,64 @@ JetFile: PolymorphicClassObjects.jet
CLASS_OBJECT
PsiElement(class)('class')
PsiWhiteSpace(' ')
OBJECT_LITERAL
OBJECT_DECLARATION
PsiElement(object)('object')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
DELEGATION_SPECIFIER_LIST
DELEGATOR_SUPER_CLASS
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Buildable')
PsiWhiteSpace(' ')
CLASS_BODY
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
FUN
MODIFIER_LIST
PsiElement(override)('override')
PsiWhiteSpace(' ')
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('newBuilder')
TYPE_PARAMETER_LIST
PsiElement(LT)('<')
TYPE_PARAMETER
PsiElement(IDENTIFIER)('E')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PARAMETER
PsiElement(IDENTIFIER)('R')
PsiElement(GT)('>')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
OBJECT_DECLARATION
PsiElement(object)('object')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
DELEGATION_SPECIFIER_LIST
DELEGATOR_SUPER_CLASS
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Buildable')
PsiWhiteSpace(' ')
CLASS_BODY
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
FUN
MODIFIER_LIST
PsiElement(override)('override')
PsiWhiteSpace(' ')
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('newBuilder')
TYPE_PARAMETER_LIST
PsiElement(LT)('<')
TYPE_PARAMETER
PsiElement(IDENTIFIER)('E')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Builder')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('E')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('R')
PsiElement(GT)('>')
PsiWhiteSpace('\n\n ')
PsiElement(RBRACE)('}')
TYPE_PARAMETER
PsiElement(IDENTIFIER)('R')
PsiElement(GT)('>')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Builder')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('E')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('R')
PsiElement(GT)('>')
PsiWhiteSpace('\n\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n')
...
...
idea/testData/psi/examples/UpdateOperation.txt
浏览文件 @
7e2e46ec
...
...
@@ -36,92 +36,91 @@ JetFile: UpdateOperation.jet
CLASS_OBJECT
PsiElement(class)('class')
PsiWhiteSpace(' ')
OBJECT_LITERAL
OBJECT_DECLARATION
PsiElement(object)('object')
PsiWhiteSpace(' ')
CLASS_BODY
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('copy')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('from')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Pair')
PsiElement(COMMA)(',')
OBJECT_DECLARATION
PsiElement(object)('object')
PsiWhiteSpace(' ')
CLASS_BODY
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('copy')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('from')
PsiWhiteSpace(' ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('from')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(COMMA)(',')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('y')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('from')
PsiElement(DOT)('.')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('y')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiElement(IDENTIFIER)('Pair')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
NEW
PsiElement(new)('new')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Pair')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
PsiElement(IDENTIFIER)('Int')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('from')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('y')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('y')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiElement(IDENTIFIER)('Int')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('from')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('y')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
NEW
PsiElement(new)('new')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Pair')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('y')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n')
...
...
idea/tests/org/jetbrains/jet/codegen/ControlStructuresTest.java
浏览文件 @
7e2e46ec
...
...
@@ -70,7 +70,7 @@ public class ControlStructuresTest extends CodegenTestCase {
}
public
void
testCondJumpOnStack
()
throws
Exception
{
loadText
(
"fun foo(a: String): Int = if (Boolean.parseBoolean(a)) 5 else 10"
);
loadText
(
"fun foo(a: String): Int = if (
java.lang.
Boolean.parseBoolean(a)) 5 else 10"
);
final
Method
main
=
generateFunction
();
assertEquals
(
5
,
main
.
invoke
(
null
,
"true"
));
assertEquals
(
10
,
main
.
invoke
(
null
,
"false"
));
...
...
idea/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java
浏览文件 @
7e2e46ec
...
...
@@ -123,7 +123,7 @@ public class PrimitiveTypesTest extends CodegenTestCase {
}
public
void
testDoubleToJava
()
throws
Exception
{
loadText
(
"fun foo(d: Double): String? = Double.toString(d)"
);
loadText
(
"fun foo(d: Double): String? =
java.lang.
Double.toString(d)"
);
final
Method
main
=
generateFunction
();
assertEquals
(
"1.0"
,
main
.
invoke
(
null
,
1.0
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录