Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
6d7e4cd0
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,发现更多精彩内容 >>
提交
6d7e4cd0
编写于
1月 08, 2012
作者:
S
Stepan Koltsov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
reading constructors from binary classes
上级
6f04e7c3
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
65 addition
and
1 deletion
+65
-1
compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java
.../org/jetbrains/jet/codegen/ImplementationBodyCodegen.java
+27
-1
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
...tbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
+12
-0
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmStdlibNames.java
...c/org/jetbrains/jet/lang/resolve/java/JvmStdlibNames.java
+4
-0
compiler/testData/readClass/constructor/Constructor0.kt
compiler/testData/readClass/constructor/Constructor0.kt
+3
-0
compiler/testData/readClass/constructor/Constructor1.kt
compiler/testData/readClass/constructor/Constructor1.kt
+3
-0
compiler/tests/org/jetbrains/jet/ReadClassDataTest.java
compiler/tests/org/jetbrains/jet/ReadClassDataTest.java
+9
-0
stdlib/src/jet/runtime/typeinfo/JetConstructor.java
stdlib/src/jet/runtime/typeinfo/JetConstructor.java
+7
-0
未找到文件。
compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java
浏览文件 @
6d7e4cd0
...
...
@@ -393,9 +393,35 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
int
flags
=
Opcodes
.
ACC_PUBLIC
;
// TODO
final
MethodVisitor
mv
=
v
.
newMethod
(
myClass
,
flags
,
"<init>"
,
constructorMethod
.
getDescriptor
(),
null
,
null
);
final
MethodVisitor
mv
=
v
.
newMethod
(
myClass
,
flags
,
constructorMethod
.
getName
()
,
constructorMethod
.
getDescriptor
(),
null
,
null
);
if
(!
v
.
generateCode
())
return
;
AnnotationVisitor
jetConstructorVisitor
=
mv
.
visitAnnotation
(
JvmStdlibNames
.
JET_CONSTRUCTOR
.
getDescriptor
(),
true
);
if
(
constructorDescriptor
==
null
)
{
jetConstructorVisitor
.
visit
(
JvmStdlibNames
.
JET_CONSTRUCTOR_HIDDEN_FIELD
,
true
);
}
jetConstructorVisitor
.
visitEnd
();
if
(
constructorDescriptor
!=
null
)
{
int
i
=
0
;
if
(
CodegenUtil
.
hasThis0
(
descriptor
))
{
i
++;
}
if
(
CodegenUtil
.
requireTypeInfoConstructorArg
(
descriptor
.
getDefaultType
()))
{
// TODO
i
++;
}
for
(
ValueParameterDescriptor
valueParameter
:
constructorDescriptor
.
getValueParameters
())
{
AnnotationVisitor
jetValueParameterAnnotation
=
mv
.
visitParameterAnnotation
(
i
++,
JvmStdlibNames
.
JET_VALUE_PARAMETER
.
getDescriptor
(),
true
);
jetValueParameterAnnotation
.
visit
(
JvmStdlibNames
.
JET_VALUE_PARAMETER_NAME_FIELD
,
valueParameter
.
getName
());
jetValueParameterAnnotation
.
visitEnd
();
}
}
mv
.
visitCode
();
List
<
ValueParameterDescriptor
>
paramDescrs
=
constructorDescriptor
!=
null
...
...
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
浏览文件 @
6d7e4cd0
...
...
@@ -260,6 +260,18 @@ public class JavaDescriptorResolver {
}
else
{
for
(
PsiMethod
constructor
:
psiConstructors
)
{
PsiAnnotation
jetConstructorAnnotation
=
constructor
.
getModifierList
().
findAnnotation
(
JvmStdlibNames
.
JET_CONSTRUCTOR
.
getFqName
());
if
(
jetConstructorAnnotation
!=
null
)
{
PsiLiteralExpression
hiddenExpresson
=
(
PsiLiteralExpression
)
jetConstructorAnnotation
.
findAttributeValue
(
JvmStdlibNames
.
JET_CONSTRUCTOR_HIDDEN_FIELD
);
if
(
hiddenExpresson
!=
null
)
{
boolean
hidden
=
(
Boolean
)
hiddenExpresson
.
getValue
();
if
(
hidden
)
{
continue
;
}
}
}
ConstructorDescriptorImpl
constructorDescriptor
=
new
ConstructorDescriptorImpl
(
classData
.
classDescriptor
,
Collections
.<
AnnotationDescriptor
>
emptyList
(),
// TODO
...
...
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmStdlibNames.java
浏览文件 @
6d7e4cd0
...
...
@@ -29,6 +29,10 @@ public class JvmStdlibNames {
public
static
final
JvmClassName
JET_PROPERTY
=
new
JvmClassName
(
"jet.runtime.typeinfo.JetProperty"
);
public
static
final
JvmClassName
JET_CONSTRUCTOR
=
new
JvmClassName
(
"jet.runtime.typeinfo.JetConstructor"
);
public
static
final
String
JET_CONSTRUCTOR_HIDDEN_FIELD
=
"hidden"
;
public
static
final
JvmClassName
JET_CLASS
=
new
JvmClassName
(
"jet.runtime.typeinfo.JetClass"
);
...
...
compiler/testData/readClass/constructor/Constructor0.kt
0 → 100644
浏览文件 @
6d7e4cd0
package
test
class
ClassWithConstructor0
()
compiler/testData/readClass/constructor/Constructor1.kt
0 → 100644
浏览文件 @
6d7e4cd0
package
test
class
ClassWithConstructor1
(
p
:
Int
)
compiler/tests/org/jetbrains/jet/ReadClassDataTest.java
浏览文件 @
6d7e4cd0
...
...
@@ -187,6 +187,12 @@ public class ReadClassDataTest extends TestCaseWithTmpdir {
List
<
String
>
memberStrings
=
new
ArrayList
<
String
>();
for
(
ConstructorDescriptor
constructor
:
klass
.
getConstructors
())
{
StringBuilder
constructorSb
=
new
StringBuilder
();
new
Serializer
(
constructorSb
).
serialize
(
constructor
);
memberStrings
.
add
(
constructorSb
.
toString
());
}
JetScope
memberScope
=
klass
.
getMemberScope
(
typeArguments
);
for
(
DeclarationDescriptor
member
:
memberScope
.
getAllDescriptors
())
{
// TODO
...
...
@@ -244,6 +250,9 @@ public class ReadClassDataTest extends TestCaseWithTmpdir {
serialize
(
fun
.
getModality
());
sb
.
append
(
" "
);
if
(
fun
instanceof
ConstructorDescriptor
)
{
sb
.
append
(
"/*constructor*/ "
);
}
sb
.
append
(
"fun "
);
if
(!
fun
.
getTypeParameters
().
isEmpty
())
{
sb
.
append
(
"<"
);
...
...
stdlib/src/jet/runtime/typeinfo/JetConstructor.java
0 → 100644
浏览文件 @
6d7e4cd0
package
jet.runtime.typeinfo
;
/**
* @author Stepan Koltsov
*/
public
@interface
JetConstructor
{
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录