diff --git a/idea/src/org/jetbrains/jet/codegen/ClassCodegen.java b/idea/src/org/jetbrains/jet/codegen/ClassCodegen.java index 3c4c2cd578e..e5314c7a80c 100644 --- a/idea/src/org/jetbrains/jet/codegen/ClassCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ClassCodegen.java @@ -17,7 +17,7 @@ public class ClassCodegen { } public void generate(JetClassOrObject aClass) { - prepareAnonymousClasses(aClass); + state.prepareAnonymousClasses((JetElement) aClass); if (aClass instanceof JetObjectDeclaration) { generateImplementation(aClass, OwnerKind.IMPLEMENTATION); @@ -35,21 +35,6 @@ public class ClassCodegen { } } - private void prepareAnonymousClasses(JetClassOrObject aClass) { - aClass.acceptChildren(new JetVisitor() { - @Override - public void visitJetElement(JetElement element) { - super.visitJetElement(element); - element.acceptChildren(this); - } - - @Override - public void visitObjectLiteralExpression(JetObjectLiteralExpression expression) { - state.getTypeMapper().classNameForAnonymousClass(expression.getObjectDeclaration()); - } - }); - } - private void generateInterface(JetClassOrObject aClass) { final ClassVisitor visitor = state.forClassInterface(state.getBindingContext().getClassDescriptor(aClass)); new InterfaceBodyCodegen(aClass, visitor, state).generate(); diff --git a/idea/src/org/jetbrains/jet/codegen/GenerationState.java b/idea/src/org/jetbrains/jet/codegen/GenerationState.java index f752144ea70..c825b2a8fc8 100644 --- a/idea/src/org/jetbrains/jet/codegen/GenerationState.java +++ b/idea/src/org/jetbrains/jet/codegen/GenerationState.java @@ -116,4 +116,19 @@ public class GenerationState { final ClosureCodegen top = closureContexts.peek(); return top != null ? top.lookupInContext(d) : null; } + + void prepareAnonymousClasses(JetElement aClass) { + aClass.acceptChildren(new JetVisitor() { + @Override + public void visitJetElement(JetElement element) { + super.visitJetElement(element); + element.acceptChildren(this); + } + + @Override + public void visitObjectLiteralExpression(JetObjectLiteralExpression expression) { + getTypeMapper().classNameForAnonymousClass(expression.getObjectDeclaration()); + } + }); + } } diff --git a/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java b/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java index 99ae887905f..752f83159bb 100644 --- a/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java @@ -3,7 +3,6 @@ package org.jetbrains.jet.codegen; import com.intellij.openapi.project.Project; import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lang.types.JetStandardLibrary; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; @@ -34,11 +33,12 @@ public class NamespaceCodegen { } public void generate(JetNamespace namespace) { - final JetStandardLibrary standardLibrary = JetStandardLibrary.getJetStandardLibrary(project); final FunctionCodegen functionCodegen = new FunctionCodegen(namespace, v, state); final PropertyCodegen propertyCodegen = new PropertyCodegen(v, functionCodegen, state); final ClassCodegen classCodegen = state.forClass(); + state.prepareAnonymousClasses(namespace); + if (hasNonConstantPropertyInitializers(namespace)) { generateStaticInitializers(namespace); }