diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java index 0dd04d4b637..6e96afdb699 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java @@ -54,9 +54,6 @@ public abstract class ClassBodyCodegen extends MemberCodegen { @Override protected void generateBody() { - FunctionCodegen functionCodegen = new FunctionCodegen(context, v, state, this); - PropertyCodegen propertyCodegen = new PropertyCodegen(context, v, functionCodegen, this); - if (kind != OwnerKind.TRAIT_IMPL) { //generate nested classes first and only then generate class body. It necessary to access to nested CodegenContexts for (JetDeclaration declaration : myClass.getDeclarations()) { @@ -93,7 +90,7 @@ public abstract class ClassBodyCodegen extends MemberCodegen { protected void generateDeclaration(PropertyCodegen propertyCodegen, JetDeclaration declaration) { if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) { - genFunctionOrProperty(declaration, v); + genFunctionOrProperty(declaration); } else if (declaration instanceof JetClassOrObject) { if (declaration instanceof JetEnumEntry && !enumEntryNeedSubclass(state.getBindingContext(), (JetEnumEntry) declaration)) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 1adf5b2fd1c..ea9ce3c0314 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -81,9 +81,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { private JetType superClassType; private final Type classAsmType; - private final FunctionCodegen functionCodegen; - private final PropertyCodegen propertyCodegen; - private List classObjectPropertiesToCopy; public ImplementationBodyCodegen( @@ -95,8 +92,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { ) { super(aClass, context, v, state, parentCodegen); this.classAsmType = typeMapper.mapClass(descriptor); - this.functionCodegen = new FunctionCodegen(context, v, state, this); - this.propertyCodegen = new PropertyCodegen(context, v, this.functionCodegen, this); } @Override diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java index d9d3e0e052e..979f4600d8d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java @@ -59,8 +59,10 @@ public abstract class MemberCodegen parentCodegen, @NotNull FieldOwnerContext context, T element, - ClassBuilder builder + @NotNull ClassBuilder builder ) { super(state, parentCodegen); this.element = element; this.context = context; this.v = builder; + this.functionCodegen = new FunctionCodegen(context, v, state, this); + this.propertyCodegen = new PropertyCodegen(context, v, functionCodegen, this); } public void generate() { @@ -106,8 +110,7 @@ public abstract class MemberCodegen memberCodegen = createCodegenForPartOfPackageFacade(context); if (member instanceof DeserializedSimpleFunctionDescriptor) { DeserializedSimpleFunctionDescriptor function = (DeserializedSimpleFunctionDescriptor) member; JvmMethodSignature signature = state.getTypeMapper().mapSignature(function, OwnerKind.PACKAGE); - functionCodegen.generateMethod(null, signature, function, - new FunctionGenerationStrategy() { - @Override - public void generateBody( - @NotNull MethodVisitor mv, - @NotNull JvmMethodSignature signature, - @NotNull MethodContext context, - @NotNull MemberCodegen parentCodegen - ) { - throw new IllegalStateException("shouldn't be called"); - } - } + memberCodegen.functionCodegen.generateMethod(null, signature, function, + new FunctionGenerationStrategy() { + @Override + public void generateBody( + @NotNull MethodVisitor mv, + @NotNull JvmMethodSignature signature, + @NotNull MethodContext context, + @NotNull MemberCodegen parentCodegen + ) { + throw new IllegalStateException("shouldn't be called"); + } + } ); } else if (member instanceof DeserializedPropertyDescriptor) { - PropertyCodegen propertyCodegen = new PropertyCodegen(context, v, functionCodegen, getMemberCodegen(context)); - propertyCodegen.generateInPackageFacade((DeserializedPropertyDescriptor) member); + memberCodegen.propertyCodegen.generateInPackageFacade((DeserializedPropertyDescriptor) member); } else { throw new IllegalStateException("Unexpected member: " + member); @@ -276,7 +276,7 @@ public class PackageCodegen { FieldOwnerContext packageFacade = CodegenContext.STATIC.intoPackageFacade(packagePartType, packageFragment); - final MemberCodegen memberCodegen = getMemberCodegen(packageFacade); + final MemberCodegen memberCodegen = createCodegenForPartOfPackageFacade(packageFacade); for (final JetDeclaration declaration : file.getDeclarations()) { if (declaration instanceof JetNamedFunction || declaration instanceof JetProperty) { @@ -288,7 +288,7 @@ public class PackageCodegen { new Runnable() { @Override public void run() { - memberCodegen.genFunctionOrProperty(declaration, v); + memberCodegen.genFunctionOrProperty(declaration); } } ); @@ -298,8 +298,8 @@ public class PackageCodegen { return builder; } - private MemberCodegen getMemberCodegen(@NotNull FieldOwnerContext packageFacade) { - return new MemberCodegen(state, null, packageFacade, null, null) { + private MemberCodegen createCodegenForPartOfPackageFacade(@NotNull FieldOwnerContext packageFacade) { + return new MemberCodegen(state, null, packageFacade, null, v) { @Override protected void generateDeclaration() { throw new UnsupportedOperationException(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackagePartCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackagePartCodegen.java index 56432142a52..66cd7392926 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackagePartCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackagePartCodegen.java @@ -61,7 +61,7 @@ public class PackagePartCodegen extends MemberCodegen { protected void generateBody() { for (JetDeclaration declaration : element.getDeclarations()) { if (declaration instanceof JetNamedFunction || declaration instanceof JetProperty) { - genFunctionOrProperty(declaration, v); + genFunctionOrProperty(declaration); } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ScriptCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ScriptCodegen.java index 318920563d0..18ed50076d7 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ScriptCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ScriptCodegen.java @@ -99,7 +99,7 @@ public class ScriptCodegen extends MemberCodegen { @Override protected void generateBody() { - genMembers(v); + genMembers(); genFieldsForParameters(scriptDescriptor, v); genConstructor(scriptDescriptor, context.getContextDescriptor(), v, context.intoFunction(scriptDescriptor.getScriptCodeDescriptor())); @@ -205,9 +205,9 @@ public class ScriptCodegen extends MemberCodegen { } } - private void genMembers(@NotNull ClassBuilder classBuilder) { + private void genMembers() { for (JetDeclaration declaration : scriptDeclaration.getDeclarations()) { - genFunctionOrProperty(declaration, classBuilder); + genFunctionOrProperty(declaration); } } }