From 5891617674eb8f84843800e379730377a98404f8 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Sun, 2 Dec 2018 23:04:17 +0300 Subject: [PATCH] Exclude clinit from ABI classes --- .../src/org/jetbrains/kotlin/jvm/abi/asm/AbiClassBuilder.kt | 5 ++++- .../kotlin/jvm/abi/CompareJvmAbiTestGenerated.java | 5 +++++ plugins/jvm-abi-gen/testData/compare/clinit/base/Object.kt | 6 ++++++ .../testData/compare/clinit/base/topLevelProperties.kt | 4 ++++ .../jvm-abi-gen/testData/compare/clinit/sameAbi/Object.kt | 6 ++++++ .../testData/compare/clinit/sameAbi/topLevelProperties.kt | 4 ++++ 6 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 plugins/jvm-abi-gen/testData/compare/clinit/base/Object.kt create mode 100644 plugins/jvm-abi-gen/testData/compare/clinit/base/topLevelProperties.kt create mode 100644 plugins/jvm-abi-gen/testData/compare/clinit/sameAbi/Object.kt create mode 100644 plugins/jvm-abi-gen/testData/compare/clinit/sameAbi/topLevelProperties.kt 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 ab9d96a7f77..102ba50aa62 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 @@ -22,7 +22,7 @@ internal class AbiClassBuilder(private val cv: ClassVisitor) : AbstractClassBuil signature: String?, exceptions: Array? ): MethodVisitor { - if (isPrivate(access)) return EMPTY_METHOD_VISITOR + if (isPrivate(access) || isClinit(name, access)) return EMPTY_METHOD_VISITOR val mv = super.newMethod(origin, access, name, desc, signature, exceptions) val descriptor = origin.descriptor @@ -62,4 +62,7 @@ internal class AbiClassBuilder(private val cv: ClassVisitor) : AbstractClassBuil private fun isPrivate(access: Int): Boolean = (access and Opcodes.ACC_PRIVATE) == Opcodes.ACC_PRIVATE + + private fun isClinit(name: String, access: Int): Boolean = + name == "" && (access and Opcodes.ACC_STATIC) == Opcodes.ACC_STATIC } \ No newline at end of file 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 830371273ea..f7e76ee2980 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 @@ -39,6 +39,11 @@ public class CompareJvmAbiTestGenerated extends AbstractCompareJvmAbiTest { runTest("plugins/jvm-abi-gen/testData/compare/classPrivateMemebers/"); } + @TestMetadata("clinit") + public void testClinit() throws Exception { + runTest("plugins/jvm-abi-gen/testData/compare/clinit/"); + } + @TestMetadata("functionBody") public void testFunctionBody() throws Exception { runTest("plugins/jvm-abi-gen/testData/compare/functionBody/"); diff --git a/plugins/jvm-abi-gen/testData/compare/clinit/base/Object.kt b/plugins/jvm-abi-gen/testData/compare/clinit/base/Object.kt new file mode 100644 index 00000000000..0430253cc4d --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/clinit/base/Object.kt @@ -0,0 +1,6 @@ +package test + +object Object { + val x = 0 + val y = x +} \ No newline at end of file diff --git a/plugins/jvm-abi-gen/testData/compare/clinit/base/topLevelProperties.kt b/plugins/jvm-abi-gen/testData/compare/clinit/base/topLevelProperties.kt new file mode 100644 index 00000000000..7909a50197d --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/clinit/base/topLevelProperties.kt @@ -0,0 +1,4 @@ +package test + +val x = 0 +val y = x \ No newline at end of file diff --git a/plugins/jvm-abi-gen/testData/compare/clinit/sameAbi/Object.kt b/plugins/jvm-abi-gen/testData/compare/clinit/sameAbi/Object.kt new file mode 100644 index 00000000000..9e35417b699 --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/clinit/sameAbi/Object.kt @@ -0,0 +1,6 @@ +package test + +object Object { + val x = 0 + val y = 0 +} \ No newline at end of file diff --git a/plugins/jvm-abi-gen/testData/compare/clinit/sameAbi/topLevelProperties.kt b/plugins/jvm-abi-gen/testData/compare/clinit/sameAbi/topLevelProperties.kt new file mode 100644 index 00000000000..cf62224ec21 --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/clinit/sameAbi/topLevelProperties.kt @@ -0,0 +1,4 @@ +package test + +val x = 0 +val y = 0 \ No newline at end of file