From bbb838765c222d440bc7699ab5837cf22261699a Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Fri, 11 Mar 2016 14:16:05 +0300 Subject: [PATCH] Obtain regenerated class name through RegeneratedInfo --- .../inline/AnonymousObjectRegenerationInfo.kt | 27 +++++++++---------- .../kotlin/codegen/inline/MethodInliner.java | 8 +++--- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectRegenerationInfo.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectRegenerationInfo.kt index 605d18dc281..825cc79517f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectRegenerationInfo.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectRegenerationInfo.kt @@ -16,9 +16,7 @@ package org.jetbrains.kotlin.codegen.inline -import org.jetbrains.org.objectweb.asm.Type - -import java.util.HashMap +import java.util.* class AnonymousObjectRegenerationInfo internal constructor( private val ownerInternalName: String, @@ -27,9 +25,12 @@ class AnonymousObjectRegenerationInfo internal constructor( private val capturedOuterRegenerated: Boolean, private val alreadyRegenerated: Boolean, val constructorDesc: String?, - private val isStaticOrigin: Boolean) : RegenerationInfo() { + private val isStaticOrigin: Boolean, + private val nameGenerator: NameGenerator) : RegenerationInfo() { - private var newLambdaType: Type? = null + private val newLambdaType: String by lazy { + nameGenerator.genLambdaClassName() + } var newConstructorDescriptor: String? = null @@ -38,11 +39,14 @@ class AnonymousObjectRegenerationInfo internal constructor( var capturedLambdasToInline: Map? = null constructor( - ownerInternalName: String, needReification: Boolean, + ownerInternalName: String, + needReification: Boolean, alreadyRegenerated: Boolean, - isStaticOrigin: Boolean) : this( + isStaticOrigin: Boolean, + nameGenerator: NameGenerator + ) : this( ownerInternalName, needReification, - HashMap(), false, alreadyRegenerated, null, isStaticOrigin) { + HashMap(), false, alreadyRegenerated, null, isStaticOrigin, nameGenerator) { } override fun getOldClassName(): String { @@ -60,11 +64,6 @@ class AnonymousObjectRegenerationInfo internal constructor( } override fun getNewClassName(): String { - return newLambdaType!!.internalName + return newLambdaType } - - fun setNewLambdaType(newLambdaType: Type) { - this.newLambdaType = newLambdaType - } - } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.java index 57a74b758d0..7e60136616e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/MethodInliner.java @@ -180,7 +180,7 @@ public class MethodInliner { if (anonymousObjectGen.shouldRegenerate(isSameModule)) { //TODO: need poping of type but what to do with local funs??? String oldClassName = anonymousObjectGen.getOldClassName(); - String newClassName = inliningContext.nameGenerator.genLambdaClassName(); + String newClassName = anonymousObjectGen.getNewClassName(); remapper.addMapping(oldClassName, newClassName); AnonymousObjectTransformer transformer = new AnonymousObjectTransformer((AnonymousObjectRegenerationInfo) anonymousObjectGen, @@ -500,7 +500,8 @@ public class MethodInliner { if (isAnonymousSingletonLoad(owner, fieldInsnNode.name)) { anonymousObjectRegenerations.add( new AnonymousObjectRegenerationInfo( - owner, awaitClassReification, isAlreadyRegenerated(owner), true + owner, awaitClassReification, isAlreadyRegenerated(owner), true, + inliningContext.nameGenerator ) ); awaitClassReification = false; @@ -560,7 +561,8 @@ public class MethodInliner { inliningContext.classRegeneration, isAlreadyRegenerated(anonymousType), desc, - false + false, + inliningContext.nameGenerator ); }