diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassFileFactory.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassFileFactory.java index cd178b91c1b..6e25718a523 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassFileFactory.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassFileFactory.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.codegen; import com.google.common.collect.Lists; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; @@ -28,7 +27,6 @@ import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.OutputFile; import org.jetbrains.jet.OutputFileCollection; import org.jetbrains.jet.codegen.state.GenerationState; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.org.objectweb.asm.Type; @@ -51,23 +49,21 @@ public class ClassFileFactory implements OutputFileCollection { @NotNull public ClassBuilder newVisitor( - @Nullable PsiElement forElement, - @Nullable DeclarationDescriptor forDescriptor, + @NotNull JvmDeclarationOrigin origin, @NotNull Type asmType, @NotNull PsiFile sourceFile) { - return newVisitor(forElement == null ? sourceFile : forElement, forDescriptor, asmType, Collections.singletonList(sourceFile)); + return newVisitor(origin, asmType, Collections.singletonList(sourceFile)); } @NotNull public ClassBuilder newVisitor( - @Nullable PsiElement forElement, - @Nullable DeclarationDescriptor forDescriptor, + @NotNull JvmDeclarationOrigin origin, @NotNull Type asmType, @NotNull Collection sourceFiles) { String outputFilePath = asmType.getInternalName() + ".class"; List ioSourceFiles = toIoFilesIgnoringNonPhysical(sourceFiles); state.getProgress().reportOutput(ioSourceFiles, new File(outputFilePath)); - ClassBuilder answer = builderFactory.newClassBuilder(forElement, forDescriptor); + ClassBuilder answer = builderFactory.newClassBuilder(origin.getElement(), origin.getDescriptor()); generators.put(outputFilePath, new ClassBuilderAndSourceFileList(answer, ioSourceFiles)); return answer; } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java index 37c1ff1e411..04d9dd73567 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -120,7 +120,7 @@ public class ClosureCodegen extends ParentCodegenAware { } public void gen() { - ClassBuilder cv = state.getFactory().newVisitor(fun, funDescriptor, asmType, fun.getContainingFile()); + ClassBuilder cv = state.getFactory().newVisitor(OtherOrigin(fun, funDescriptor), asmType, fun.getContainingFile()); FunctionDescriptor erasedInterfaceFunction; if (samType == null) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 4dba443ce57..b7b7ba14d76 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -67,6 +67,7 @@ import org.jetbrains.org.objectweb.asm.commons.Method; import java.util.*; import static org.jetbrains.jet.codegen.AsmUtil.*; +import static org.jetbrains.jet.codegen.CodegenPackage.OtherOrigin; import static org.jetbrains.jet.codegen.JvmCodegenUtil.*; import static org.jetbrains.jet.codegen.binding.CodegenBinding.*; import static org.jetbrains.jet.lang.resolve.BindingContext.*; @@ -175,7 +176,11 @@ public class ExpressionCodegen extends JetVisitor implem assert classDescriptor != null; Type asmType = asmTypeForAnonymousClass(bindingContext, objectDeclaration); - ClassBuilder classBuilder = state.getFactory().newVisitor(objectDeclaration, classDescriptor, asmType, literal.getContainingFile()); + ClassBuilder classBuilder = state.getFactory().newVisitor( + OtherOrigin(objectDeclaration, classDescriptor), + asmType, + literal.getContainingFile() + ); ClassContext objectContext = context.intoAnonymousClass(classDescriptor, this); @@ -264,7 +269,7 @@ public class ExpressionCodegen extends JetVisitor implem assert descriptor != null; Type asmType = asmTypeForAnonymousClass(bindingContext, declaration); - ClassBuilder classBuilder = state.getFactory().newVisitor(declaration, descriptor, asmType, declaration.getContainingFile()); + ClassBuilder classBuilder = state.getFactory().newVisitor(OtherOrigin(declaration, descriptor), asmType, declaration.getContainingFile()); ClassContext objectContext = context.intoAnonymousClass(descriptor, this); new ImplementationBodyCodegen(declaration, objectContext, classBuilder, state, getParentCodegen()).generate(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java index 814871b9898..49bb9c978c5 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/MemberCodegen.java @@ -164,13 +164,13 @@ public abstract class MemberCodegen { Type className = state.getBindingContext().get(ASM_TYPE, classDescriptorForScript); assert className != null; - ClassBuilder builder = state.getFactory().newVisitor(declaration, classDescriptorForScript, className, declaration.getContainingFile()); + ClassBuilder builder = state.getFactory().newVisitor(OtherOrigin(declaration, classDescriptorForScript), + className, declaration.getContainingFile()); List earlierScripts = state.getEarlierScriptsForReplInterpreter(); ScriptContext scriptContext = parentContext.intoScript( scriptDescriptor, diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/AnonymousObjectTransformer.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/AnonymousObjectTransformer.java index 2033946d74c..412aa92d9f3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/AnonymousObjectTransformer.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/AnonymousObjectTransformer.java @@ -296,7 +296,7 @@ public class AnonymousObjectTransformer { @NotNull private ClassBuilder createClassBuilder() { - ClassBuilder classBuilder = state.getFactory().newVisitor(null, null, newLambdaType, inliningContext.getRoot().callElement.getContainingFile()); + ClassBuilder classBuilder = state.getFactory().newVisitor(NO_ORIGIN, newLambdaType, inliningContext.getRoot().callElement.getContainingFile()); return new RemappingClassBuilder(classBuilder, new TypeRemapper(inliningContext.typeMapping)); }