diff --git a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiOutputExtension.kt b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiOutputExtension.kt index c494ad77462..86d59567ee2 100644 --- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiOutputExtension.kt +++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiOutputExtension.kt @@ -79,6 +79,7 @@ class JvmAbiOutputExtension( else -> /* abiInfo is AbiClassInfo.Stripped */ { val methodInfo = (abiInfo as AbiClassInfo.Stripped).methodInfo val innerClassesToKeep = mutableSetOf() + val noMethodsKept = methodInfo.values.none { it == AbiMethodInfo.KEEP } val writer = ClassWriter(0) val remapper = ClassRemapper(writer, object : Remapper() { override fun map(internalName: String): String = @@ -127,7 +128,7 @@ class JvmAbiOutputExtension( override fun visitSource(source: String?, debug: String?) { when { removeDebugInfo -> super.visitSource(null, null) - methodInfo.values.none { it == AbiMethodInfo.KEEP } -> { + noMethodsKept -> { // Strip SourceDebugExtension attribute if there are no inline functions. super.visitSource(source, null) } @@ -144,8 +145,9 @@ class JvmAbiOutputExtension( override fun visitAnnotation(descriptor: String?, visible: Boolean): AnnotationVisitor? { // Strip @SourceDebugExtension annotation if we're removing debug info. - if (removeDebugInfo && descriptor == JvmAnnotationNames.SOURCE_DEBUG_EXTENSION_DESC) - return null + if (descriptor == JvmAnnotationNames.SOURCE_DEBUG_EXTENSION_DESC) { + if (removeDebugInfo || noMethodsKept) return null + } val delegate = super.visitAnnotation(descriptor, visible) if (descriptor != JvmAnnotationNames.METADATA_DESC) diff --git a/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/CompareJvmAbiTestGenerated.java b/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/CompareJvmAbiTestGenerated.java index 886cc62cb89..b386ceb1a90 100644 --- a/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/CompareJvmAbiTestGenerated.java +++ b/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/CompareJvmAbiTestGenerated.java @@ -115,6 +115,11 @@ public class CompareJvmAbiTestGenerated extends AbstractCompareJvmAbiTest { runTest("plugins/jvm-abi-gen/testData/compare/inlineFunInPrivateNestedClass/"); } + @TestMetadata("inlineFunUsageMakesAbiUnstable") + public void testInlineFunUsageMakesAbiUnstable() throws Exception { + runTest("plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/"); + } + @TestMetadata("inlineFunctionBody") public void testInlineFunctionBody() throws Exception { runTest("plugins/jvm-abi-gen/testData/compare/inlineFunctionBody/"); diff --git a/plugins/jvm-abi-gen/testData/compare/debugInfoSourceDebugExtension/differentAbi/test.kt b/plugins/jvm-abi-gen/testData/compare/debugInfoSourceDebugExtension/sameAbi/test.kt similarity index 100% rename from plugins/jvm-abi-gen/testData/compare/debugInfoSourceDebugExtension/differentAbi/test.kt rename to plugins/jvm-abi-gen/testData/compare/debugInfoSourceDebugExtension/sameAbi/test.kt diff --git a/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/base/inlineFunDeclaratiion.kt b/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/base/inlineFunDeclaratiion.kt new file mode 100644 index 00000000000..8aab91ae616 --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/base/inlineFunDeclaratiion.kt @@ -0,0 +1,4 @@ +//this file could be in the same or in the different compilation module +package test + +inline fun inlineFun() = Unit diff --git a/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/base/test.kt b/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/base/test.kt new file mode 100644 index 00000000000..42d1c5908f8 --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/base/test.kt @@ -0,0 +1,5 @@ +package test + +private fun main() { + inlineFun() +} diff --git a/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/sameAbi/inlineFunDeclaratiion.kt b/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/sameAbi/inlineFunDeclaratiion.kt new file mode 100644 index 00000000000..8aab91ae616 --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/sameAbi/inlineFunDeclaratiion.kt @@ -0,0 +1,4 @@ +//this file could be in the same or in the different compilation module +package test + +inline fun inlineFun() = Unit diff --git a/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/sameAbi/test.kt b/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/sameAbi/test.kt new file mode 100644 index 00000000000..c42641a93a0 --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/sameAbi/test.kt @@ -0,0 +1,6 @@ +package test + +private fun main() { + //comment should not break ABI + inlineFun() +}