diff --git a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiAnalysisHandlerExtension.kt b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiAnalysisHandlerExtension.kt index 9c2d3781a95..5e444485e1d 100644 --- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiAnalysisHandlerExtension.kt +++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiAnalysisHandlerExtension.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.incremental.LocalFileKotlinClass import org.jetbrains.kotlin.incremental.isClassFile import org.jetbrains.kotlin.jvm.abi.asm.AbiClassBuilder +import org.jetbrains.kotlin.jvm.abi.asm.AbiExtensionAsmApiVersion import org.jetbrains.kotlin.jvm.abi.asm.FilterInnerClassesVisitor import org.jetbrains.kotlin.jvm.abi.asm.InnerClassesCollectingVisitor import org.jetbrains.kotlin.load.kotlin.FileBasedKotlinClass @@ -137,7 +138,7 @@ class JvmAbiAnalysisHandlerExtension( output.delete() } else { output.transform { writer -> - FilterInnerClassesVisitor(classesToRemove, Opcodes.ASM6, writer) + FilterInnerClassesVisitor(classesToRemove, AbiExtensionAsmApiVersion, writer) } } } diff --git a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/AbiClassBuilder.kt b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/AbiClassBuilder.kt index 102ba50aa62..2afde5de6b3 100644 --- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/AbiClassBuilder.kt +++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/AbiClassBuilder.kt @@ -26,11 +26,13 @@ internal class AbiClassBuilder(private val cv: ClassVisitor) : AbstractClassBuil val mv = super.newMethod(origin, access, name, desc, signature, exceptions) val descriptor = origin.descriptor + // inline function bodies are part of ABI, + // but non-inline functions can be thrown out if (descriptor is FunctionDescriptor && descriptor.isInline) return mv // getArgumentsAndReturnSizes returns `(argSize << 2) | retSize`, where argSize includes `this` val maxLocals = (Type.getArgumentsAndReturnSizes(desc) shr 2) - 1 - return ReplaceWithEmptyMethodVisitor(maxLocals, mv, Opcodes.ASM6) + return ReplaceWithEmptyMethodVisitor(maxLocals, mv, AbiExtensionAsmApiVersion) } override fun newField( diff --git a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/AsmApiVersion.kt b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/AsmApiVersion.kt new file mode 100644 index 00000000000..906472c2b58 --- /dev/null +++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/AsmApiVersion.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.jvm.abi.asm + +import org.jetbrains.org.objectweb.asm.Opcodes + +internal const val AbiExtensionAsmApiVersion = Opcodes.ASM6 \ No newline at end of file diff --git a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/InnerClassesCollectingVisitor.kt b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/InnerClassesCollectingVisitor.kt index a790cca8dcf..c3bdd7321c3 100644 --- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/InnerClassesCollectingVisitor.kt +++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/asm/InnerClassesCollectingVisitor.kt @@ -1,10 +1,9 @@ package org.jetbrains.kotlin.jvm.abi.asm import org.jetbrains.org.objectweb.asm.ClassVisitor -import org.jetbrains.org.objectweb.asm.Opcodes -internal class InnerClassesCollectingVisitor : ClassVisitor(Opcodes.ASM6) { - var ownInternalName: String? = null +internal class InnerClassesCollectingVisitor : ClassVisitor(AbiExtensionAsmApiVersion) { + lateinit var ownInternalName: String private set private val myInnerClasses = arrayListOf() diff --git a/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/AbstractJvmAbiContentTest.kt b/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/AbstractJvmAbiContentTest.kt index d1bb30860f6..3379bbeaf05 100644 --- a/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/AbstractJvmAbiContentTest.kt +++ b/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/AbstractJvmAbiContentTest.kt @@ -2,6 +2,7 @@ package org.jetbrains.kotlin.jvm.abi import com.intellij.testFramework.UsefulTestCase import org.jetbrains.kotlin.incremental.isClassFile +import org.jetbrains.kotlin.jvm.abi.asm.AbiExtensionAsmApiVersion import org.jetbrains.kotlin.utils.Printer import org.jetbrains.org.objectweb.asm.* import java.io.File @@ -35,7 +36,7 @@ abstract class AbstractJvmAbiContentTest : BaseJvmAbiTest() { } } -private class PrintingClassVisitor(private val p: Printer) : ClassVisitor(Opcodes.ASM6) { +private class PrintingClassVisitor(private val p: Printer) : ClassVisitor(AbiExtensionAsmApiVersion) { override fun visit( version: Int, access: Int, diff --git a/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/BaseJvmAbiTest.kt b/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/BaseJvmAbiTest.kt index 8b1c240202f..d9c59a50d34 100644 --- a/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/BaseJvmAbiTest.kt +++ b/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/BaseJvmAbiTest.kt @@ -31,7 +31,7 @@ abstract class BaseJvmAbiTest : TestCase() { "plugin:${JvmAbiCommandLineProcessor.COMPILER_PLUGIN_ID}:$option=$value" inner class Compilation( - val projectDir: File, + private val projectDir: File, val name: String?, val dependencies: Collection = emptyList() ) {