提交 fdb2b98b 编写于 作者: S Stepan Koltsov

more di in jvm backend

上级 99cc2686
......@@ -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();
}
}
......
......@@ -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.
先完成此消息的编辑!
想要评论请 注册