From 06095e86ca26c92cd7b0defe845543f52fd8fd7a Mon Sep 17 00:00:00 2001 From: Vladimir Tagakov Date: Tue, 16 Jan 2024 16:03:30 -0700 Subject: [PATCH] jvm-abi-gen: remove SourceDebugExtension if no inline functions present #KT-65072 Fixed --- .../org/jetbrains/kotlin/jvm/abi/JvmAbiOutputExtension.kt | 8 +++++--- .../kotlin/jvm/abi/CompareJvmAbiTestGenerated.java | 5 +++++ .../{differentAbi => sameAbi}/test.kt | 0 .../base/inlineFunDeclaratiion.kt | 4 ++++ .../compare/inlineFunUsageMakesAbiUnstable/base/test.kt | 5 +++++ .../sameAbi/inlineFunDeclaratiion.kt | 4 ++++ .../inlineFunUsageMakesAbiUnstable/sameAbi/test.kt | 6 ++++++ 7 files changed, 29 insertions(+), 3 deletions(-) rename plugins/jvm-abi-gen/testData/compare/debugInfoSourceDebugExtension/{differentAbi => sameAbi}/test.kt (100%) create mode 100644 plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/base/inlineFunDeclaratiion.kt create mode 100644 plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/base/test.kt create mode 100644 plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/sameAbi/inlineFunDeclaratiion.kt create mode 100644 plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/sameAbi/test.kt 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() +}