From 1cfb81455ca2fc96077bc55b3208f76165464877 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Wed, 9 Dec 2020 10:21:04 +0100 Subject: [PATCH] Generate correct names for companion @JvmStatic accessors in annotation class #KT-31389 Fixed --- .../kotlin/codegen/state/KotlinTypeMapper.kt | 5 ++- .../ir/FirBlackBoxCodegenTestGenerated.java | 5 +++ .../testData/codegen/box/jvmStatic/kt31389.kt | 36 +++++++++++++++++++ .../codegen/bytecodeListing/kt31389.kt | 12 +++++++ .../codegen/bytecodeListing/kt31389.txt | 26 ++++++++++++++ .../codegen/bytecodeListing/kt31389_ir.txt | 26 ++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 +++ .../codegen/BytecodeListingTestGenerated.java | 5 +++ .../LightAnalysisModeTestGenerated.java | 5 +++ .../ir/IrBlackBoxCodegenTestGenerated.java | 5 +++ .../ir/IrBytecodeListingTestGenerated.java | 5 +++ 11 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/jvmStatic/kt31389.kt create mode 100644 compiler/testData/codegen/bytecodeListing/kt31389.kt create mode 100644 compiler/testData/codegen/bytecodeListing/kt31389.txt create mode 100644 compiler/testData/codegen/bytecodeListing/kt31389_ir.txt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt index f9324d61432..df20065d4be 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt @@ -50,6 +50,7 @@ import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.BindingContextUtils.getDelegationConstructorCall import org.jetbrains.kotlin.resolve.BindingContextUtils.isBoxedLocalCapturedInClosure import org.jetbrains.kotlin.resolve.DescriptorUtils.* +import org.jetbrains.kotlin.resolve.annotations.hasJvmStaticAnnotation import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall @@ -582,7 +583,9 @@ class KotlinTypeMapper @JvmOverloads constructor( return when { descriptor is PropertyAccessorDescriptor -> { val property = descriptor.correspondingProperty - if (isAnnotationClass(property.containingDeclaration)) { + if (isAnnotationClass(property.containingDeclaration) && + (!property.hasJvmStaticAnnotation() && !descriptor.hasJvmStaticAnnotation()) + ) { return property.name.asString() } diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index a5a3048e364..cbc5d97d0d4 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -18022,6 +18022,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/jvmStatic/kt21246a.kt"); } + @TestMetadata("kt31389.kt") + public void testKt31389() throws Exception { + runTest("compiler/testData/codegen/box/jvmStatic/kt31389.kt"); + } + @TestMetadata("kt35716.kt") public void testKt35716() throws Exception { runTest("compiler/testData/codegen/box/jvmStatic/kt35716.kt"); diff --git a/compiler/testData/codegen/box/jvmStatic/kt31389.kt b/compiler/testData/codegen/box/jvmStatic/kt31389.kt new file mode 100644 index 00000000000..5b105554ec6 --- /dev/null +++ b/compiler/testData/codegen/box/jvmStatic/kt31389.kt @@ -0,0 +1,36 @@ +// TARGET_BACKEND: JVM +// JVM_TARGET: 1.8 +// WITH_RUNTIME +// FILE: Test.java + +class Test { + public static String foo() { + return Annotation.getTEST_FIELD(); + } + + public static String foo2() { + return Annotation.getTEST_FIELD2(); + } + + public static void foo2Set() { + Annotation.setTEST_FIELD2("OK"); + } +} + +// FILE: kt31389.kt + +annotation class Annotation { + companion object { + @JvmStatic val TEST_FIELD = "OK" + + var TEST_FIELD2 = "" + @JvmStatic get + @JvmStatic set + } +} + +fun box(): String { + if (Test.foo() != "OK") return "Fail 1: ${Test.foo()}" + Test.foo2Set() + return Test.foo2() +} diff --git a/compiler/testData/codegen/bytecodeListing/kt31389.kt b/compiler/testData/codegen/bytecodeListing/kt31389.kt new file mode 100644 index 00000000000..16ac14e3323 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/kt31389.kt @@ -0,0 +1,12 @@ +// JVM_TARGET: 1.8 +// WITH_RUNTIME + +annotation class Annotation { + companion object { + @JvmStatic val TEST_FIELD = "OK" + + var TEST_FIELD2 = "" + @JvmStatic get + @JvmStatic set + } +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/kt31389.txt b/compiler/testData/codegen/bytecodeListing/kt31389.txt new file mode 100644 index 00000000000..6b3246831d9 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/kt31389.txt @@ -0,0 +1,26 @@ +@kotlin.Metadata +public final class Annotation$Companion { + // source: 'kt31389.kt' + synthetic final static field $$INSTANCE: Annotation$Companion + private static @org.jetbrains.annotations.NotNull field TEST_FIELD2: java.lang.String + private final static @org.jetbrains.annotations.NotNull field TEST_FIELD: java.lang.String + static method (): void + private method (): void + public synthetic deprecated static @kotlin.jvm.JvmStatic method getTEST_FIELD$annotations(): void + public final @org.jetbrains.annotations.NotNull method getTEST_FIELD(): java.lang.String + public final @kotlin.jvm.JvmStatic @org.jetbrains.annotations.NotNull method getTEST_FIELD2(): java.lang.String + public final @kotlin.jvm.JvmStatic method setTEST_FIELD2(@org.jetbrains.annotations.NotNull p0: java.lang.String): void + public final inner class Annotation$Companion +} + +@java.lang.annotation.Retention +@kotlin.Metadata +public annotation class Annotation { + // source: 'kt31389.kt' + public final static @org.jetbrains.annotations.NotNull field Companion: Annotation$Companion + static method (): void + public static method getTEST_FIELD(): java.lang.String + public static @kotlin.jvm.JvmStatic method getTEST_FIELD2(): java.lang.String + public static @kotlin.jvm.JvmStatic method setTEST_FIELD2(@org.jetbrains.annotations.NotNull p0: java.lang.String): void + public final inner class Annotation$Companion +} diff --git a/compiler/testData/codegen/bytecodeListing/kt31389_ir.txt b/compiler/testData/codegen/bytecodeListing/kt31389_ir.txt new file mode 100644 index 00000000000..34432aabd03 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/kt31389_ir.txt @@ -0,0 +1,26 @@ +@kotlin.Metadata +public final class Annotation$Companion { + // source: 'kt31389.kt' + synthetic final static field $$INSTANCE: Annotation$Companion + private static @org.jetbrains.annotations.NotNull field TEST_FIELD2: java.lang.String + private final static @org.jetbrains.annotations.NotNull field TEST_FIELD: java.lang.String + static method (): void + private method (): void + public synthetic deprecated static @kotlin.jvm.JvmStatic method getTEST_FIELD$annotations(): void + public final @org.jetbrains.annotations.NotNull method getTEST_FIELD(): java.lang.String + public final @kotlin.jvm.JvmStatic @org.jetbrains.annotations.NotNull method getTEST_FIELD2(): java.lang.String + public final @kotlin.jvm.JvmStatic method setTEST_FIELD2(@org.jetbrains.annotations.NotNull p0: java.lang.String): void + public final inner class Annotation$Companion +} + +@java.lang.annotation.Retention +@kotlin.Metadata +public annotation class Annotation { + // source: 'kt31389.kt' + public final static @org.jetbrains.annotations.NotNull field Companion: Annotation$Companion + static method (): void + public static @org.jetbrains.annotations.NotNull method getTEST_FIELD(): java.lang.String + public static @kotlin.jvm.JvmStatic @org.jetbrains.annotations.NotNull method getTEST_FIELD2(): java.lang.String + public static @kotlin.jvm.JvmStatic method setTEST_FIELD2(@org.jetbrains.annotations.NotNull p0: java.lang.String): void + public final inner class Annotation$Companion +} diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 87cfb1fc0c5..1ca163d8a9f 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -19422,6 +19422,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/jvmStatic/kt21246a.kt"); } + @TestMetadata("kt31389.kt") + public void testKt31389() throws Exception { + runTest("compiler/testData/codegen/box/jvmStatic/kt31389.kt"); + } + @TestMetadata("kt35716.kt") public void testKt35716() throws Exception { runTest("compiler/testData/codegen/box/jvmStatic/kt35716.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index 5399293cbda..fa229ea4ab2 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -114,6 +114,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/jvmStaticWithDefaultParameters.kt"); } + @TestMetadata("kt31389.kt") + public void testKt31389() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/kt31389.kt"); + } + @TestMetadata("kt42137.kt") public void testKt42137() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/kt42137.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 8871864fb7a..29bc2f066da 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -19422,6 +19422,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/jvmStatic/kt21246a.kt"); } + @TestMetadata("kt31389.kt") + public void testKt31389() throws Exception { + runTest("compiler/testData/codegen/box/jvmStatic/kt31389.kt"); + } + @TestMetadata("kt35716.kt") public void testKt35716() throws Exception { runTest("compiler/testData/codegen/box/jvmStatic/kt35716.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index b06b6c3c28e..77118ac6c05 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -18022,6 +18022,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/jvmStatic/kt21246a.kt"); } + @TestMetadata("kt31389.kt") + public void testKt31389() throws Exception { + runTest("compiler/testData/codegen/box/jvmStatic/kt31389.kt"); + } + @TestMetadata("kt35716.kt") public void testKt35716() throws Exception { runTest("compiler/testData/codegen/box/jvmStatic/kt35716.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index 5b4a34b3657..16d73c5e213 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -114,6 +114,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/jvmStaticWithDefaultParameters.kt"); } + @TestMetadata("kt31389.kt") + public void testKt31389() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/kt31389.kt"); + } + @TestMetadata("kt42137.kt") public void testKt42137() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/kt42137.kt");