Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
fdb2b98b
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,发现更多精彩内容 >>
提交
fdb2b98b
编写于
5月 21, 2012
作者:
S
Stepan Koltsov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more di in jvm backend
上级
99cc2686
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
19 addition
and
6 deletion
+19
-6
compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java
...r/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java
+15
-5
compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java
...ckend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java
+4
-1
未找到文件。
compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java
浏览文件 @
fdb2b98b
...
...
@@ -21,6 +21,7 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import
org.jetbrains.jet.lang.psi.*
;
import
org.jetbrains.jet.lang.resolve.BindingContext
;
import
javax.inject.Inject
;
import
java.util.HashMap
;
/**
...
...
@@ -28,17 +29,26 @@ import java.util.HashMap;
* @author alex.tkachman
*/
public
class
ClassCodegen
{
private
final
GenerationState
state
;
private
GenerationState
state
;
private
JetTypeMapper
jetTypeMapper
;
public
ClassCodegen
(
GenerationState
state
)
{
@Inject
public
void
setState
(
GenerationState
state
)
{
this
.
state
=
state
;
}
@Inject
public
void
setJetTypeMapper
(
JetTypeMapper
jetTypeMapper
)
{
this
.
jetTypeMapper
=
jetTypeMapper
;
}
public
void
generate
(
CodegenContext
context
,
JetClassOrObject
aClass
)
{
ClassDescriptor
descriptor
=
state
.
getBindingContext
().
get
(
BindingContext
.
CLASS
,
aClass
);
ClassBuilder
classBuilder
=
state
.
forClassImplementation
(
descriptor
);
final
CodegenContext
contextForInners
=
context
.
intoClass
(
descriptor
,
OwnerKind
.
IMPLEMENTATION
,
state
.
getInjector
().
getJetTypeMapper
()
);
final
CodegenContext
contextForInners
=
context
.
intoClass
(
descriptor
,
OwnerKind
.
IMPLEMENTATION
,
jetTypeMapper
);
if
(
state
.
getClassBuilderMode
()
==
ClassBuilderMode
.
SIGNATURES
)
{
// Outer class implementation must happen prior inner classes so we get proper scoping tree in JetLightClass's delegate
...
...
@@ -63,13 +73,13 @@ public class ClassCodegen {
private
void
generateImplementation
(
CodegenContext
context
,
JetClassOrObject
aClass
,
OwnerKind
kind
,
HashMap
<
DeclarationDescriptor
,
DeclarationDescriptor
>
accessors
,
ClassBuilder
classBuilder
)
{
ClassDescriptor
descriptor
=
state
.
getBindingContext
().
get
(
BindingContext
.
CLASS
,
aClass
);
CodegenContext
classContext
=
context
.
intoClass
(
descriptor
,
kind
,
state
.
getInjector
().
getJetTypeMapper
()
);
CodegenContext
classContext
=
context
.
intoClass
(
descriptor
,
kind
,
jetTypeMapper
);
classContext
.
copyAccessors
(
accessors
);
new
ImplementationBodyCodegen
(
aClass
,
classContext
,
classBuilder
,
state
).
generate
();
if
(
aClass
instanceof
JetClass
&&
((
JetClass
)
aClass
).
isTrait
())
{
ClassBuilder
traitBuilder
=
state
.
forTraitImplementation
(
descriptor
);
new
TraitImplBodyCodegen
(
aClass
,
context
.
intoClass
(
descriptor
,
OwnerKind
.
TRAIT_IMPL
,
state
.
getInjector
().
getJetTypeMapper
()
),
traitBuilder
,
state
).
generate
();
new
TraitImplBodyCodegen
(
aClass
,
context
.
intoClass
(
descriptor
,
OwnerKind
.
TRAIT_IMPL
,
jetTypeMapper
),
traitBuilder
,
state
).
generate
();
traitBuilder
.
done
();
}
}
...
...
compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java
浏览文件 @
fdb2b98b
...
...
@@ -79,7 +79,7 @@ public class InjectorForJvmCodegen {
this
.
generationState
=
generationState
;
this
.
classBuilderFactory
=
classBuilderFactory
;
this
.
jetTypeMapper
=
new
JetTypeMapper
();
this
.
classCodegen
=
new
ClassCodegen
(
getGenerationState
()
);
this
.
classCodegen
=
new
ClassCodegen
();
this
.
intrinsics
=
new
IntrinsicMethods
();
this
.
classFileFactory
=
new
ClassFileFactory
();
this
.
closureAnnotator
=
new
ClosureAnnotator
();
...
...
@@ -90,6 +90,9 @@ public class InjectorForJvmCodegen {
this
.
jetTypeMapper
.
setCompilerSpecialMode
(
compilerSpecialMode
);
this
.
jetTypeMapper
.
setStandardLibrary
(
jetStandardLibrary
);
this
.
classCodegen
.
setJetTypeMapper
(
jetTypeMapper
);
this
.
classCodegen
.
setState
(
generationState
);
this
.
intrinsics
.
setMyProject
(
project
);
this
.
intrinsics
.
setMyStdLib
(
jetStandardLibrary
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录