jvm-abi-gen: remove SourceDebugExtension if no inline functions present
#KT-65072 Fixed
This commit is contained in:
committed by
Space Team
parent
8fbe376f25
commit
06095e86ca
@@ -79,6 +79,7 @@ class JvmAbiOutputExtension(
|
|||||||
else -> /* abiInfo is AbiClassInfo.Stripped */ {
|
else -> /* abiInfo is AbiClassInfo.Stripped */ {
|
||||||
val methodInfo = (abiInfo as AbiClassInfo.Stripped).methodInfo
|
val methodInfo = (abiInfo as AbiClassInfo.Stripped).methodInfo
|
||||||
val innerClassesToKeep = mutableSetOf<String>()
|
val innerClassesToKeep = mutableSetOf<String>()
|
||||||
|
val noMethodsKept = methodInfo.values.none { it == AbiMethodInfo.KEEP }
|
||||||
val writer = ClassWriter(0)
|
val writer = ClassWriter(0)
|
||||||
val remapper = ClassRemapper(writer, object : Remapper() {
|
val remapper = ClassRemapper(writer, object : Remapper() {
|
||||||
override fun map(internalName: String): String =
|
override fun map(internalName: String): String =
|
||||||
@@ -127,7 +128,7 @@ class JvmAbiOutputExtension(
|
|||||||
override fun visitSource(source: String?, debug: String?) {
|
override fun visitSource(source: String?, debug: String?) {
|
||||||
when {
|
when {
|
||||||
removeDebugInfo -> super.visitSource(null, null)
|
removeDebugInfo -> super.visitSource(null, null)
|
||||||
methodInfo.values.none { it == AbiMethodInfo.KEEP } -> {
|
noMethodsKept -> {
|
||||||
// Strip SourceDebugExtension attribute if there are no inline functions.
|
// Strip SourceDebugExtension attribute if there are no inline functions.
|
||||||
super.visitSource(source, null)
|
super.visitSource(source, null)
|
||||||
}
|
}
|
||||||
@@ -144,8 +145,9 @@ class JvmAbiOutputExtension(
|
|||||||
|
|
||||||
override fun visitAnnotation(descriptor: String?, visible: Boolean): AnnotationVisitor? {
|
override fun visitAnnotation(descriptor: String?, visible: Boolean): AnnotationVisitor? {
|
||||||
// Strip @SourceDebugExtension annotation if we're removing debug info.
|
// Strip @SourceDebugExtension annotation if we're removing debug info.
|
||||||
if (removeDebugInfo && descriptor == JvmAnnotationNames.SOURCE_DEBUG_EXTENSION_DESC)
|
if (descriptor == JvmAnnotationNames.SOURCE_DEBUG_EXTENSION_DESC) {
|
||||||
return null
|
if (removeDebugInfo || noMethodsKept) return null
|
||||||
|
}
|
||||||
|
|
||||||
val delegate = super.visitAnnotation(descriptor, visible)
|
val delegate = super.visitAnnotation(descriptor, visible)
|
||||||
if (descriptor != JvmAnnotationNames.METADATA_DESC)
|
if (descriptor != JvmAnnotationNames.METADATA_DESC)
|
||||||
|
|||||||
+5
@@ -115,6 +115,11 @@ public class CompareJvmAbiTestGenerated extends AbstractCompareJvmAbiTest {
|
|||||||
runTest("plugins/jvm-abi-gen/testData/compare/inlineFunInPrivateNestedClass/");
|
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")
|
@TestMetadata("inlineFunctionBody")
|
||||||
public void testInlineFunctionBody() throws Exception {
|
public void testInlineFunctionBody() throws Exception {
|
||||||
runTest("plugins/jvm-abi-gen/testData/compare/inlineFunctionBody/");
|
runTest("plugins/jvm-abi-gen/testData/compare/inlineFunctionBody/");
|
||||||
|
|||||||
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
//this file could be in the same or in the different compilation module
|
||||||
|
package test
|
||||||
|
|
||||||
|
inline fun inlineFun() = Unit
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
private fun main() {
|
||||||
|
inlineFun()
|
||||||
|
}
|
||||||
plugins/jvm-abi-gen/testData/compare/inlineFunUsageMakesAbiUnstable/sameAbi/inlineFunDeclaratiion.kt
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
//this file could be in the same or in the different compilation module
|
||||||
|
package test
|
||||||
|
|
||||||
|
inline fun inlineFun() = Unit
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
private fun main() {
|
||||||
|
//comment should not break ABI
|
||||||
|
inlineFun()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user