From fdb2b98b0c3d0812e857396209aadec9adcb2f7a Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Mon, 21 May 2012 19:20:32 +0400 Subject: [PATCH] more di in jvm backend --- .../jetbrains/jet/codegen/ClassCodegen.java | 20 ++++++++++++++----- .../jet/di/InjectorForJvmCodegen.java | 5 ++++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java index 0d24f1f1054..9e835bb5103 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java @@ -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 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(); } } diff --git a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java index 74f9e444453..578730b2874 100644 --- a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java @@ -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);