Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
068780f8
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,发现更多精彩内容 >>
提交
068780f8
编写于
12月 15, 2011
作者:
S
Stepan Koltsov
提交者:
Nikolay Krasko
12月 16, 2011
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
reading class signature (incomplete)
上级
f8c9f24d
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
109 addition
and
7 deletion
+109
-7
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
...tbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
+88
-5
compiler/testData/readClass/class/ClassInParam.kt
compiler/testData/readClass/class/ClassInParam.kt
+3
-0
compiler/testData/readClass/class/ClassOutParam.kt
compiler/testData/readClass/class/ClassOutParam.kt
+3
-0
compiler/testData/readClass/class/ClassParam.kt
compiler/testData/readClass/class/ClassParam.kt
+3
-0
compiler/tests/org/jetbrains/jet/ReadClassDataTest.java
compiler/tests/org/jetbrains/jet/ReadClassDataTest.java
+8
-2
stdlib/src/org/jetbrains/jet/rt/signature/JetSignatureReader.java
...rc/org/jetbrains/jet/rt/signature/JetSignatureReader.java
+4
-0
未找到文件。
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
浏览文件 @
068780f8
...
...
@@ -17,6 +17,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import
org.jetbrains.jet.lang.resolve.DescriptorUtils
;
import
org.jetbrains.jet.lang.types.*
;
import
org.jetbrains.jet.plugin.JetFileType
;
import
org.jetbrains.jet.rt.signature.JetSignatureAdapter
;
import
org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter
;
import
org.jetbrains.jet.rt.signature.JetSignatureReader
;
import
org.jetbrains.jet.rt.signature.JetSignatureVisitor
;
...
...
@@ -124,9 +125,9 @@ public class JavaDescriptorResolver {
resolveParentDescriptor
(
psiClass
),
psiClass
.
isInterface
()
?
ClassKind
.
TRAIT
:
ClassKind
.
CLASS
);
classDescriptor
.
setName
(
name
);
List
<
JetType
>
supertypes
=
new
ArrayList
<
JetType
>();
List
<
TypeParameterDescriptor
>
typeParameters
=
makeUninitializedTypeParameters
(
classDescriptor
,
psiClass
.
getTypeParameters
()
);
List
<
TypeParameterDescriptor
>
typeParameters
=
resolveClassTypeParameters
(
psiClass
,
classDescriptor
);
classDescriptor
.
setTypeConstructor
(
new
TypeConstructorImpl
(
classDescriptor
,
Collections
.<
AnnotationDescriptor
>
emptyList
(),
// TODO
...
...
@@ -144,8 +145,11 @@ public class JavaDescriptorResolver {
classDescriptorCache
.
put
(
psiClass
.
getQualifiedName
(),
classDescriptor
);
classDescriptor
.
setUnsubstitutedMemberScope
(
new
JavaClassMembersScope
(
classDescriptor
,
psiClass
,
semanticServices
,
false
));
// UGLY HACK
initializeTypeParameters
(
psiClass
);
// TODO: initialize
if
(
psiClass
.
getModifierList
().
findAnnotation
(
StdlibNames
.
JET_CLASS
.
getFqName
())
==
null
)
{
// UGLY HACK (Andrey Breslav is not sure what did he mean)
initializeTypeParameters
(
psiClass
);
}
supertypes
.
addAll
(
getSupertypes
(
psiClass
));
if
(
psiClass
.
isInterface
())
{
...
...
@@ -197,6 +201,82 @@ public class JavaDescriptorResolver {
return
classDescriptor
;
}
private
List
<
TypeParameterDescriptor
>
resolveClassTypeParameters
(
PsiClass
psiClass
,
JavaClassDescriptor
classDescriptor
)
{
for
(
PsiAnnotation
annotation
:
psiClass
.
getModifierList
().
getAnnotations
())
{
if
(
annotation
.
getQualifiedName
().
equals
(
StdlibNames
.
JET_CLASS
.
getFqName
()))
{
PsiLiteralExpression
attributeValue
=
(
PsiLiteralExpression
)
annotation
.
findAttributeValue
(
StdlibNames
.
JET_CLASS_SIGNATURE
);
if
(
attributeValue
!=
null
)
{
String
typeParametersString
=
(
String
)
attributeValue
.
getValue
();
if
(
typeParametersString
!=
null
)
{
return
resolveClassTypeParametersFromJetSignature
(
typeParametersString
,
classDescriptor
);
}
}
}
}
return
makeUninitializedTypeParameters
(
classDescriptor
,
psiClass
.
getTypeParameters
());
}
/**
* @see #resolveMethodTypeParametersFromJetSignature(String, FunctionDescriptor)
*/
private
List
<
TypeParameterDescriptor
>
resolveClassTypeParametersFromJetSignature
(
String
jetSignature
,
final
JavaClassDescriptor
classDescriptor
)
{
final
List
<
TypeParameterDescriptor
>
r
=
new
ArrayList
<
TypeParameterDescriptor
>();
new
JetSignatureReader
(
jetSignature
).
accept
(
new
JetSignatureExceptionsAdapter
()
{
@Override
public
JetSignatureVisitor
visitFormalTypeParameter
(
final
String
name
,
final
TypeInfoVariance
variance
)
{
return
new
JetSignatureExceptionsAdapter
()
{
int
index
=
0
;
@Override
public
JetSignatureVisitor
visitClassBound
()
{
return
new
JetTypeJetSignatureReader
(
JavaDescriptorResolver
.
this
,
semanticServices
.
getJetSemanticServices
().
getStandardLibrary
())
{
@Override
protected
void
done
(
@NotNull
JetType
jetType
)
{
// TODO
}
};
}
@Override
public
JetSignatureVisitor
visitInterfaceBound
()
{
return
new
JetTypeJetSignatureReader
(
JavaDescriptorResolver
.
this
,
semanticServices
.
getJetSemanticServices
().
getStandardLibrary
())
{
@Override
protected
void
done
(
@NotNull
JetType
jetType
)
{
// TODO
}
};
}
@Override
public
void
visitFormalTypeParameterEnd
()
{
TypeParameterDescriptor
typeParameter
=
TypeParameterDescriptor
.
createForFurtherModification
(
classDescriptor
,
Collections
.<
AnnotationDescriptor
>
emptyList
(),
// TODO: wrong
true
,
// TODO: wrong
JetSignatureUtils
.
translateVariance
(
variance
),
name
,
++
index
);
r
.
add
(
typeParameter
);
}
};
}
@Override
public
JetSignatureVisitor
visitSuperclass
()
{
// TODO
return
new
JetSignatureAdapter
();
}
@Override
public
JetSignatureVisitor
visitInterface
()
{
// TODO
return
new
JetSignatureAdapter
();
}
});
return
r
;
}
private
DeclarationDescriptor
resolveParentDescriptor
(
PsiClass
psiClass
)
{
PsiClass
containingClass
=
psiClass
.
getContainingClass
();
if
(
containingClass
!=
null
)
{
...
...
@@ -546,7 +626,10 @@ public class JavaDescriptorResolver {
initializeTypeParameters
(
method
);
return
typeParameters
;
}
/**
* @see #resolveClassTypeParametersFromJetSignature(String, JavaClassDescriptor)
*/
private
List
<
TypeParameterDescriptor
>
resolveMethodTypeParametersFromJetSignature
(
String
jetSignature
,
final
FunctionDescriptor
functionDescriptor
)
{
final
List
<
TypeParameterDescriptor
>
r
=
new
ArrayList
<
TypeParameterDescriptor
>();
new
JetSignatureReader
(
jetSignature
).
acceptFormalTypeParametersOnly
(
new
JetSignatureExceptionsAdapter
()
{
...
...
compiler/testData/readClass/class/ClassInParam.kt
0 → 100644
浏览文件 @
068780f8
namespace
test
class
Wine
<
in
T
>
compiler/testData/readClass/class/ClassOutParam.kt
0 → 100644
浏览文件 @
068780f8
namespace
test
class
Juice
<
in
T
>
compiler/testData/readClass/class/ClassParam.kt
0 → 100644
浏览文件 @
068780f8
namespace
test
class
Beer
<
T
>
compiler/tests/org/jetbrains/jet/ReadClassDataTest.java
浏览文件 @
068780f8
...
...
@@ -153,16 +153,22 @@ public class ReadClassDataTest extends UsefulTestCase {
String
bs
=
serializeContent
((
ClassDescriptor
)
b
);
Assert
.
assertEquals
(
as
,
bs
);
System
.
out
.
println
(
a
);
System
.
out
.
println
(
a
s
);
}
private
String
serializeContent
(
ClassDescriptor
klass
)
{
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"class "
);
serialize
(
klass
,
sb
);
if
(!
klass
.
getTypeConstructor
().
getParameters
().
isEmpty
())
{
sb
.
append
(
"<"
);
serializeCommaSeparated
(
klass
.
getTypeConstructor
().
getParameters
(),
sb
);
sb
.
append
(
">"
);
}
// TODO: supers
// TODO: constructors
...
...
stdlib/src/org/jetbrains/jet/rt/signature/JetSignatureReader.java
浏览文件 @
068780f8
...
...
@@ -36,6 +36,10 @@ public class JetSignatureReader {
pos
=
parseType
(
signature
,
pos
,
v
.
visitInterface
());
}
}
if
(
pos
!=
signature
.
length
())
{
throw
new
IllegalStateException
();
}
}
public
int
acceptFormalTypeParameters
(
JetSignatureVisitor
v
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录