ClassCodegen is stateless, put it into context

This commit is contained in:
Stepan Koltsov
2012-05-19 00:23:59 +04:00
parent 1da55747ff
commit 4cf2e7bd3d
5 changed files with 11 additions and 7 deletions
@@ -50,7 +50,7 @@ public class ClassCodegen {
generate(contextForInners, (JetClass) declaration);
}
if(declaration instanceof JetClassObject) {
state.forClass().generate(contextForInners, ((JetClassObject)declaration).getObjectDeclaration());
state.getInjector().getClassCodegen().generate(contextForInners, ((JetClassObject)declaration).getObjectDeclaration());
}
}
@@ -91,10 +91,6 @@ public class GenerationState {
return classBuilderMode;
}
public ClassCodegen forClass() {
return new ClassCodegen(this);
}
public ClassBuilder forClassImplementation(ClassDescriptor aClass) {
return getFactory().newVisitor(getInjector().getJetTypeMapper().mapType(aClass.getDefaultType(), MapTypeMode.IMPL).getInternalName() + ".class");
}
@@ -61,7 +61,6 @@ public class NamespaceCodegen {
final FunctionCodegen functionCodegen = new FunctionCodegen(context, v, state);
final PropertyCodegen propertyCodegen = new PropertyCodegen(context, v, functionCodegen, state);
final ClassCodegen classCodegen = state.forClass();
for (JetDeclaration declaration : file.getDeclarations()) {
if (declaration instanceof JetProperty) {
@@ -79,7 +78,7 @@ public class NamespaceCodegen {
}
}
else if (declaration instanceof JetClassOrObject) {
classCodegen.generate(context, (JetClassOrObject) declaration);
state.getInjector().getClassCodegen().generate(context, (JetClassOrObject) declaration);
}
// else if (declaration instanceof JetFile) {
// JetFile childNamespace = (JetFile) declaration;
@@ -27,6 +27,7 @@ import org.jetbrains.jet.codegen.ClassBuilderMode;
import org.jetbrains.jet.codegen.GenerationState;
import org.jetbrains.jet.codegen.ClassBuilderFactory;
import org.jetbrains.jet.codegen.JetTypeMapper;
import org.jetbrains.jet.codegen.ClassCodegen;
import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods;
import org.jetbrains.jet.codegen.ClassFileFactory;
import org.jetbrains.jet.codegen.ClosureAnnotator;
@@ -54,6 +55,7 @@ public class InjectorForJvmCodegen {
private final GenerationState generationState;
private final ClassBuilderFactory classBuilderFactory;
private JetTypeMapper jetTypeMapper;
private ClassCodegen classCodegen;
private IntrinsicMethods intrinsics;
private ClassFileFactory classFileFactory;
private ClosureAnnotator closureAnnotator;
@@ -77,6 +79,7 @@ public class InjectorForJvmCodegen {
this.generationState = generationState;
this.classBuilderFactory = classBuilderFactory;
this.jetTypeMapper = new JetTypeMapper();
this.classCodegen = new ClassCodegen(getGenerationState());
this.intrinsics = new IntrinsicMethods();
this.classFileFactory = new ClassFileFactory();
this.closureAnnotator = new ClosureAnnotator();
@@ -120,6 +123,10 @@ public class InjectorForJvmCodegen {
return this.jetTypeMapper;
}
public ClassCodegen getClassCodegen() {
return this.classCodegen;
}
public IntrinsicMethods getIntrinsics() {
return this.intrinsics;
}
@@ -19,6 +19,7 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.codegen.ClassBuilderFactory;
import org.jetbrains.jet.codegen.ClassBuilderMode;
import org.jetbrains.jet.codegen.ClassCodegen;
import org.jetbrains.jet.codegen.ClassFileFactory;
import org.jetbrains.jet.codegen.GenerationState;
import org.jetbrains.jet.codegen.JetTypeMapper;
@@ -154,6 +155,7 @@ public class AllInjectorsGenerator {
generator.addPublicParameter(GenerationState.class);
generator.addParameter(ClassBuilderFactory.class);
generator.addPublicField(JetTypeMapper.class);
generator.addPublicField(ClassCodegen.class);
generator.addField(true, IntrinsicMethods.class, "intrinsics", null);
generator.addPublicField(ClassFileFactory.class);
generator.generate("compiler/backend/src", "org.jetbrains.jet.di", "InjectorForJvmCodegen");