From 182e1c1b3bbbb350181962d3dcf973daced40fb9 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Thu, 6 Feb 2020 15:39:51 +0300 Subject: [PATCH] JVM_IR: Remove buggy special case accessor code from JvmStaticAnnotationLowering General purpose accessors in SyntheticAnnotationLowering are sufficient. --- .../jvm/lower/JvmStaticAnnotationLowering.kt | 29 +++++-------------- .../box/jvmStatic/jvmNameForAccessor.kt | 20 +++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 ++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ .../ir/FirBlackBoxCodegenTestGenerated.java | 5 ++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 5 ++++ 6 files changed, 48 insertions(+), 21 deletions(-) create mode 100644 compiler/testData/codegen/box/jvmStatic/jvmNameForAccessor.kt diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt index 9f6b4452c05..85be30982e6 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/JvmStaticAnnotationLowering.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource @@ -62,28 +63,14 @@ private class CompanionObjectJvmStaticLowering(val context: JvmBackendContext) : it is IrClass && it.isCompanion } as IrClass? - companion?.declarations?.filter(::isJvmStaticFunction)?.forEach { - val jvmStaticFunction = it as IrSimpleFunction + companion?.declarations?.filter(::isJvmStaticFunction)?.forEach { declaration -> + val jvmStaticFunction = declaration as IrSimpleFunction val newName = Name.identifier(context.methodSignatureMapper.mapFunctionName(jvmStaticFunction)) - if (!jvmStaticFunction.visibility.isPublicAPI) { - // TODO: Synthetic accessor creation logic should be supported in SyntheticAccessorLowering in the future. - val accessorName = Name.identifier("access\$$newName") - val accessor = createProxy( - jvmStaticFunction, companion, companion, accessorName, Visibilities.PUBLIC, - isSynthetic = true - ) - companion.addMember(accessor) - val proxy = createProxy( - accessor, irClass, companion, newName, jvmStaticFunction.visibility, isSynthetic = false - ) - irClass.addMember(proxy) - } else { - val proxy = createProxy( - jvmStaticFunction, irClass, companion, newName, jvmStaticFunction.visibility, - isSynthetic = false - ) - irClass.addMember(proxy) - } + val proxy = createProxy( + jvmStaticFunction, irClass, companion, newName, jvmStaticFunction.visibility, + isSynthetic = false + ) + irClass.addMember(proxy) } } diff --git a/compiler/testData/codegen/box/jvmStatic/jvmNameForAccessor.kt b/compiler/testData/codegen/box/jvmStatic/jvmNameForAccessor.kt new file mode 100644 index 00000000000..53af3dab897 --- /dev/null +++ b/compiler/testData/codegen/box/jvmStatic/jvmNameForAccessor.kt @@ -0,0 +1,20 @@ +// IGNORE_BACKEND_FIR: JVM_IR +// TARGET_BACKEND: JVM +// WITH_RUNTIME +// FILE: tt.kt +package tt + +class CA { + companion object { + @JvmStatic + @JvmName("uhoh") + internal fun f(): String = "OK" + } +} + +// FILE: qq.kt + +package qq +import tt.CA + +fun box() = CA.f() \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 4b13548dc27..ee1b364e5d5 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -15938,6 +15938,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/jvmStatic/interfaceCompanion.kt"); } + @TestMetadata("jvmNameForAccessor.kt") + public void testJvmNameForAccessor() throws Exception { + runTest("compiler/testData/codegen/box/jvmStatic/jvmNameForAccessor.kt"); + } + @TestMetadata("kt21246.kt") public void testKt21246() throws Exception { runTest("compiler/testData/codegen/box/jvmStatic/kt21246.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 3ab0bf2548c..f56c8086333 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15938,6 +15938,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/jvmStatic/interfaceCompanion.kt"); } + @TestMetadata("jvmNameForAccessor.kt") + public void testJvmNameForAccessor() throws Exception { + runTest("compiler/testData/codegen/box/jvmStatic/jvmNameForAccessor.kt"); + } + @TestMetadata("kt21246.kt") public void testKt21246() throws Exception { runTest("compiler/testData/codegen/box/jvmStatic/kt21246.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index a330352a3d5..7746e5026a3 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -14813,6 +14813,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/jvmStatic/interfaceCompanion.kt"); } + @TestMetadata("jvmNameForAccessor.kt") + public void testJvmNameForAccessor() throws Exception { + runTest("compiler/testData/codegen/box/jvmStatic/jvmNameForAccessor.kt"); + } + @TestMetadata("kt21246.kt") public void testKt21246() throws Exception { runTest("compiler/testData/codegen/box/jvmStatic/kt21246.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 6234e833454..3f0491c63a4 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -14813,6 +14813,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/jvmStatic/interfaceCompanion.kt"); } + @TestMetadata("jvmNameForAccessor.kt") + public void testJvmNameForAccessor() throws Exception { + runTest("compiler/testData/codegen/box/jvmStatic/jvmNameForAccessor.kt"); + } + @TestMetadata("kt21246.kt") public void testKt21246() throws Exception { runTest("compiler/testData/codegen/box/jvmStatic/kt21246.kt");