diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.java index a54546f8de0..2095b65da70 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * Copyright 2010-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.codegen.FieldInfo; import org.jetbrains.kotlin.codegen.StackValue; import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper; +import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin; import org.jetbrains.org.objectweb.asm.*; import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; import org.jetbrains.org.objectweb.asm.tree.*; @@ -73,14 +74,14 @@ public class AnonymousObjectTransformer extends ObjectTransformer innerClassNodes = new ArrayList(); - ClassBuilder classBuilder = createRemappingClassBuilderViaFactory(inliningContext); + final ClassBuilder classBuilder = createRemappingClassBuilderViaFactory(inliningContext); final List methodsToTransform = new ArrayList(); createClassReader().accept(new ClassVisitor(InlineCodegenUtil.API, classBuilder.getVisitor()) { @Override public void visit(int version, int access, @NotNull String name, String signature, String superName, String[] interfaces) { InlineCodegenUtil.assertVersionNotGreaterThanJava6(version, name); - super.visit(version, access, name, signature, superName, interfaces); + classBuilder.defineClass(null, version, access, name, signature, superName, interfaces); } @Override @@ -112,7 +113,7 @@ public class AnonymousObjectTransformer extends ObjectTransformer() val fieldNode = transformationInfo.fieldNode classReader.accept(object : ClassVisitor(InlineCodegenUtil.API, classBuilder.visitor) { - override fun visit(version: Int, access: Int, name: String, signature: String?, superName: String?, interfaces: Array?) { + override fun visit(version: Int, access: Int, name: String, signature: String?, superName: String, interfaces: Array) { InlineCodegenUtil.assertVersionNotGreaterThanJava6(version, name) - super.visit(version, access, name, signature, superName, interfaces) + classBuilder.defineClass(null, version, access, name, signature, superName, interfaces) } override fun visitField(access: Int, name: String, desc: String, signature: String?, value: Any?): FieldVisitor? { return if (name.equals(fieldNode.name)) { - super.visitField(access, name, desc, signature, value) + classBuilder.newField(JvmDeclarationOrigin.NO_ORIGIN, access, name, desc, signature, value) } else { null diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/RemappingClassBuilder.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/RemappingClassBuilder.java index 27925b6872c..3cb378d6796 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/RemappingClassBuilder.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/RemappingClassBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * Copyright 2010-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.codegen.inline; +import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.codegen.ClassBuilder; @@ -42,6 +43,19 @@ public class RemappingClassBuilder extends DelegatingClassBuilder { return builder; } + @Override + public void defineClass( + @Nullable PsiElement origin, + int version, + int access, + @NotNull String name, + @Nullable String signature, + @NotNull String superName, + @NotNull String[] interfaces + ) { + super.defineClass(origin, version, access, remapper.mapType(name), remapper.mapSignature(signature, false), remapper.mapType(superName), remapper.mapTypes(interfaces)); + } + @Override @NotNull public FieldVisitor newField(