From 1bc299508a911137d4aa50f5f1fc3857eaa6cfd0 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 20 Mar 2023 23:49:46 +0100 Subject: [PATCH] Fir2Ir: do not skip building static fake overrides for enums Fake overrides are needed at least for static fields inherited from Java interfaces. Not static methods though, because they are not inherited. #KT-57302 Fixed --- .../fir/backend/generators/FakeOverrideGenerator.kt | 1 - .../FirLightTreeBlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/FirPsiBlackBoxCodegenTestGenerated.java | 6 ++++++ .../box/statics/enumWithInheritedStaticField.kt | 13 +++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../codegen/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ ...IrBlackBoxCodegenWithIrInlinerTestGenerated.java | 6 ++++++ .../codegen/LightAnalysisModeTestGenerated.java | 5 +++++ 8 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt index 2e57ab67a88..eff892787e1 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt @@ -94,7 +94,6 @@ class FakeOverrideGenerator( ) } } - if (firClass.isEnumClass) return@buildList // F/O for values/valueOf/entries aren't needed, for other members aren't possible val staticScope = firClass.scopeProvider.getStaticMemberScopeForCallables(firClass, session, scopeSession) if (staticScope != null) { generateFakeOverridesForName( diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index b3926a12aed..ba0babcf933 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -49303,6 +49303,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/statics/anonymousInitializerInClassObject.kt"); } + @Test + @TestMetadata("enumWithInheritedStaticField.kt") + public void testEnumWithInheritedStaticField() throws Exception { + runTest("compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt"); + } + @Test @TestMetadata("fields.kt") public void testFields() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 0cd924504c1..0e3a8b19aad 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -49303,6 +49303,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/statics/anonymousInitializerInClassObject.kt"); } + @Test + @TestMetadata("enumWithInheritedStaticField.kt") + public void testEnumWithInheritedStaticField() throws Exception { + runTest("compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt"); + } + @Test @TestMetadata("fields.kt") public void testFields() throws Exception { diff --git a/compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt b/compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt new file mode 100644 index 00000000000..1047bd87951 --- /dev/null +++ b/compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt @@ -0,0 +1,13 @@ +// TARGET_BACKEND: JVM +// IGNORE_LIGHT_ANALYSIS +// FILE: E.java + +interface I { + String result = "OK"; +} + +public enum E implements I {} + +// FILE: box.kt + +fun box(): String = E.result diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 17585463d39..40fb8dd7206 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -46879,6 +46879,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/statics/anonymousInitializerInClassObject.kt"); } + @Test + @TestMetadata("enumWithInheritedStaticField.kt") + public void testEnumWithInheritedStaticField() throws Exception { + runTest("compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt"); + } + @Test @TestMetadata("fields.kt") public void testFields() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 89fa92985da..dad4a19e33a 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -49303,6 +49303,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/statics/anonymousInitializerInClassObject.kt"); } + @Test + @TestMetadata("enumWithInheritedStaticField.kt") + public void testEnumWithInheritedStaticField() throws Exception { + runTest("compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt"); + } + @Test @TestMetadata("fields.kt") public void testFields() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index 0ec1d5ece04..9257af13d21 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -49303,6 +49303,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/statics/anonymousInitializerInClassObject.kt"); } + @Test + @TestMetadata("enumWithInheritedStaticField.kt") + public void testEnumWithInheritedStaticField() throws Exception { + runTest("compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt"); + } + @Test @TestMetadata("fields.kt") public void testFields() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 886174882ec..c4e03d00e13 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -37969,6 +37969,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/statics/anonymousInitializerInClassObject.kt"); } + @TestMetadata("enumWithInheritedStaticField.kt") + public void testEnumWithInheritedStaticField() throws Exception { + runTest("compiler/testData/codegen/box/statics/enumWithInheritedStaticField.kt"); + } + @TestMetadata("fields.kt") public void testFields() throws Exception { runTest("compiler/testData/codegen/box/statics/fields.kt");