From 6d7dc45ce6035c1f93eff54fca788731c5043984 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Mon, 8 May 2023 15:35:25 +0000 Subject: [PATCH] K1: Add test for compatibility check of Enum.entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Basically, the test checks that adding Enum.entries feature doesn't break the existing code where it clashes with the user-defined "entries" declaration; it's better to have a black-box test to be sure that the compiler doesn't invoke something different at runtime The test covers KT-53153 and KT-56587 Merge-request: KT-MR-9798 Merged-by: Michail Zarečenskij --- ...LightTreeBlackBoxCodegenTestGenerated.java | 6 ++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 ++ .../box/enum/enumEntriesCompatibilityCheck.kt | 89 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 6 ++ .../LightAnalysisModeTestGenerated.java | 5 ++ .../js/test/JsCodegenBoxTestGenerated.java | 6 ++ .../fir/FirJsCodegenBoxTestGenerated.java | 6 ++ .../test/ir/IrJsCodegenBoxTestGenerated.java | 6 ++ .../ir/IrJsES6CodegenBoxTestGenerated.java | 6 ++ .../FirNativeCodegenBoxTestGenerated.java | 6 ++ .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 ++ .../NativeCodegenBoxTestGenerated.java | 6 ++ .../NativeCodegenBoxTestNoPLGenerated.java | 6 ++ .../test/IrCodegenBoxWasmTestGenerated.java | 5 ++ 16 files changed, 177 insertions(+) create mode 100644 compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt 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 8ebbfc4662c..7e72d7078f4 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 @@ -16643,6 +16643,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesFromJava.kt") public void testEnumEntriesFromJava() 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 5ad89913815..489c629ca4d 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 @@ -16643,6 +16643,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesFromJava.kt") public void testEnumEntriesFromJava() throws Exception { diff --git a/compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt b/compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt new file mode 100644 index 00000000000..2b061400e9c --- /dev/null +++ b/compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt @@ -0,0 +1,89 @@ +// !LANGUAGE: +EnumEntries +// IGNORE_BACKEND: JS, JVM, JS_IR, JS_IR_ES6 +// IGNORE_BACKEND_K2: JVM_IR, NATIVE +// IGNORE_LIGHT_ANALYSIS +// FULL_JDK +// WITH_STDLIB + +package pckg + +import kotlin.test.assertEquals + +enum class EBasic { + A0; +} + +enum class E0 {; + companion object { + val entries = "OK" + } +} + +object Shadowing { + val entries = "OK" + + enum class E0 { + E; + + fun test() = entries + } +} + +enum class E01 {; + object entries { + override fun toString(): String { + return "OK" + } + } +} + +enum class E02(val entries: String) { + E("OK"); + fun test() = entries // check whether this entries is referenced to ctor parameter +} + +var e03Res: String? = null + +enum class E03 { + E("OK"); + + constructor(entries: String) { + e03Res = entries + } +} + +enum class E04 { + E; + val entries = "OK" + fun test() = entries +} + +// This case doesn't work in KJS/IR: KT-58396 +interface I05 { + val entries: String + get() = "OK" +} + +enum class E05 : I05 { + E; + + fun test() = entries +} + +@OptIn(ExperimentalStdlibApi::class) +fun box(): String { + assertEquals(EBasic.entries.first().toString(), "A0") // make sure the feature is working + + assertEquals(E0.entries, "OK") + assertEquals(Shadowing.E0.E.test(), "OK") + assertEquals(E01.entries.toString(), "OK") + assertEquals(E02.E.test(), "OK") + + E03.E // to initialize e03Res + assertEquals(e03Res, "OK") + + assertEquals(E04.E.entries, "OK") + assertEquals(E04.E.test(), "OK") + assertEquals(E05.E.test(), "OK") + return "OK" +} 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 190ea310c56..d0478b0da14 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 @@ -16295,6 +16295,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() 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 dd02a566621..b554293766d 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 @@ -16643,6 +16643,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesFromJava.kt") public void testEnumEntriesFromJava() 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 8ffda066cff..ac32150a86d 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 @@ -16643,6 +16643,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesFromJava.kt") public void testEnumEntriesFromJava() 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 600874977e7..15926f404dd 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -13366,6 +13366,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void ignoreEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @TestMetadata("enumEntriesInCompanion.kt") public void ignoreEnumEntriesInCompanion() throws Exception { runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java index 5f08f0e5fa0..8a13fb50c02 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java @@ -12587,6 +12587,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index 13bf09f1f8a..8beb80ab888 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -12683,6 +12683,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java index afd5fb35d48..a3ffe1cc46d 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java @@ -12683,6 +12683,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java index a85d3db03b7..914b0eed9d7 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsES6CodegenBoxTestGenerated.java @@ -12683,6 +12683,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java index 92edee89ed1..c442dff501a 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestGenerated.java @@ -13831,6 +13831,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java index 0f04a39f89c..a4c8a107eb9 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/FirNativeCodegenBoxTestNoPLGenerated.java @@ -14155,6 +14155,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java index c7377d73b5e..a920e7dace8 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java @@ -13670,6 +13670,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() throws Exception { diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java index e0746205eac..b60a5798e6d 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestNoPLGenerated.java @@ -13832,6 +13832,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @Test + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @Test @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java index f75347a3f71..cbf9a4c4186 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/IrCodegenBoxWasmTestGenerated.java @@ -11249,6 +11249,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/enum/enumEntries.kt"); } + @TestMetadata("enumEntriesCompatibilityCheck.kt") + public void testEnumEntriesCompatibilityCheck() throws Exception { + runTest("compiler/testData/codegen/box/enum/enumEntriesCompatibilityCheck.kt"); + } + @TestMetadata("enumEntriesInCompanion.kt") public void testEnumEntriesInCompanion() throws Exception { runTest("compiler/testData/codegen/box/enum/enumEntriesInCompanion.kt");