diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectRegenerationInfo.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectRegenerationInfo.kt deleted file mode 100644 index 59da7dff790..00000000000 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/AnonymousObjectRegenerationInfo.kt +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2010-2015 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.codegen.inline - -import java.util.* - -class AnonymousObjectRegenerationInfo internal constructor( - override val oldClassName: String, - private val needReification: Boolean, - val lambdasToInline: Map, - private val capturedOuterRegenerated: Boolean, - private val alreadyRegenerated: Boolean, - val constructorDesc: String?, - private val isStaticOrigin: Boolean, - private val nameGenerator: NameGenerator) : RegenerationInfo() { - - override val newClassName: String by lazy { - nameGenerator.genLambdaClassName() - } - - var newConstructorDescriptor: String? = null - - var allRecapturedParameters: List? = null - - var capturedLambdasToInline: Map? = null - - constructor( - ownerInternalName: String, - needReification: Boolean, - alreadyRegenerated: Boolean, - isStaticOrigin: Boolean, - nameGenerator: NameGenerator - ) : this( - ownerInternalName, needReification, - HashMap(), false, alreadyRegenerated, null, isStaticOrigin, nameGenerator) { - } - - override fun shouldRegenerate(sameModule: Boolean): Boolean { - return !alreadyRegenerated && (!lambdasToInline.isEmpty() || !sameModule || capturedOuterRegenerated || needReification) - } - - override fun canRemoveAfterTransformation(): Boolean { - // Note: It is unsafe to remove anonymous class that is referenced by GETSTATIC within lambda - // because it can be local function from outer scope - return !isStaticOrigin - } -} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/RegenerationInfo.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/RegenerationInfo.kt index c9ebe4412ba..1ce431b7924 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/RegenerationInfo.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/RegenerationInfo.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. + * Copyright 2010-2015 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,29 +16,73 @@ package org.jetbrains.kotlin.codegen.inline +import java.util.* + abstract class RegenerationInfo() { - abstract val oldClassName: String + abstract val oldClassName: String - abstract val newClassName: String + abstract val newClassName: String - abstract fun shouldRegenerate(sameModule: Boolean): Boolean + abstract fun shouldRegenerate(sameModule: Boolean): Boolean - abstract fun canRemoveAfterTransformation(): Boolean + abstract fun canRemoveAfterTransformation(): Boolean } class WhenMappingRegenerationInfo(override val oldClassName: String, val nameGenerator: NameGenerator) : RegenerationInfo() { - override val newClassName by lazy { - nameGenerator.genLambdaClassName() + oldClassName.substringAfterLast("/") - } + override val newClassName by lazy { + nameGenerator.genLambdaClassName() + oldClassName.substringAfterLast("/") + } - override fun shouldRegenerate(sameModule: Boolean): Boolean { - throw UnsupportedOperationException() - } + override fun shouldRegenerate(sameModule: Boolean): Boolean { + throw UnsupportedOperationException() + } - override fun canRemoveAfterTransformation(): Boolean { - return true - } -} \ No newline at end of file + override fun canRemoveAfterTransformation(): Boolean { + return true + } +} + +class AnonymousObjectRegenerationInfo internal constructor( + override val oldClassName: String, + private val needReification: Boolean, + val lambdasToInline: Map, + private val capturedOuterRegenerated: Boolean, + private val alreadyRegenerated: Boolean, + val constructorDesc: String?, + private val isStaticOrigin: Boolean, + private val nameGenerator: NameGenerator) : RegenerationInfo() { + + override val newClassName: String by lazy { + nameGenerator.genLambdaClassName() + } + + var newConstructorDescriptor: String? = null + + var allRecapturedParameters: List? = null + + var capturedLambdasToInline: Map? = null + + constructor( + ownerInternalName: String, + needReification: Boolean, + alreadyRegenerated: Boolean, + isStaticOrigin: Boolean, + nameGenerator: NameGenerator + ) : this( + ownerInternalName, needReification, + HashMap(), false, alreadyRegenerated, null, isStaticOrigin, nameGenerator) { + } + + override fun shouldRegenerate(sameModule: Boolean): Boolean { + return !alreadyRegenerated && (!lambdasToInline.isEmpty() || !sameModule || capturedOuterRegenerated || needReification) + } + + override fun canRemoveAfterTransformation(): Boolean { + // Note: It is unsafe to remove anonymous class that is referenced by GETSTATIC within lambda + // because it can be local function from outer scope + return !isStaticOrigin + } +}