diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index 8f1f0145f70..694871dbd57 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -15150,6 +15150,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt"); } + @Test + @TestMetadata("getEnumEntityByOrdinal.kt") + public void testGetEnumEntityByOrdinal() throws Exception { + runTest("compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt"); + } + @Test @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { @@ -15414,6 +15420,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/enum/ordinal.kt"); } + @Test + @TestMetadata("ordinalsWithEnumEntitiesOverrides.kt") + public void testOrdinalsWithEnumEntitiesOverrides() throws Exception { + runTest("compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt"); + } + @Test @TestMetadata("overloadedEnumValues.kt") public void testOverloadedEnumValues() throws Exception { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt index 5cd2e134fe5..78b67c27231 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/EnumClassLowering.kt @@ -176,7 +176,7 @@ class EnumClassConstructorBodyTransformer(val context: JsCommonBackendContext) : irClass.correspondingEntry?.let { enumEntry -> // Lower `IrEnumConstructorCall`s inside of enum entry class constructors to corresponding `IrDelegatingConstructorCall`s. // Add `name` and `ordinal` parameters. - lowerEnumEntryClassConstructors(irClass, enumEntry, container) + lowerEnumEntryClassConstructors(enumEntry.parentAsClass, enumEntry, container) } } @@ -234,7 +234,7 @@ class EnumClassConstructorBodyTransformer(val context: JsCommonBackendContext) : } private inner class IrEnumEntryClassConstructorTransformer( - val irClass: IrClass, + irClass: IrClass, val entry: IrEnumEntry, val isInsideConstructor: Boolean ) : diff --git a/compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt b/compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt new file mode 100644 index 00000000000..db0cbdb3609 --- /dev/null +++ b/compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt @@ -0,0 +1,13 @@ +package foo + +enum class X { + B { + override val value2 = "K" + override val value = "O" + B.value2.get(X.B.ordinal).toString() + }; + + abstract val value2: String + abstract val value: String +} + +fun box() = X.B.value \ No newline at end of file diff --git a/compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt b/compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt new file mode 100644 index 00000000000..b6e7e544f00 --- /dev/null +++ b/compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt @@ -0,0 +1,45 @@ +// WITH_RUNTIME + +package foo + +import kotlin.test.assertEquals + +enum class TestA { + FIRST { + override val label: String = "first A" + }, + SECOND { + override val label: String = "second A" + }, + THIRD { + override val label: String = "third A" + }; + + abstract val label: String +} + +enum class TestB(val label: String) { + FIRST("first B"), + SECOND("second B"), + THIRD("third B"); +} + +fun box(): String { + assertEquals(TestA.FIRST.label, "first A") + assertEquals(TestA.SECOND.label, "second A") + assertEquals(TestA.THIRD.label, "third A") + + assertEquals(TestA.FIRST.ordinal, 0) + assertEquals(TestA.SECOND.ordinal, 1) + assertEquals(TestA.THIRD.ordinal, 2) + + assertEquals(TestB.FIRST.label,"first B") + assertEquals(TestB.SECOND.label,"second B") + assertEquals(TestB.THIRD.label,"third B") + + assertEquals(TestB.FIRST.ordinal, 0) + assertEquals(TestB.SECOND.ordinal, 1) + assertEquals(TestB.THIRD.ordinal, 2) + + 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 80331de86fe..62a8333d69c 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 @@ -15072,6 +15072,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt"); } + @Test + @TestMetadata("getEnumEntityByOrdinal.kt") + public void testGetEnumEntityByOrdinal() throws Exception { + runTest("compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt"); + } + @Test @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { @@ -15336,6 +15342,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/enum/ordinal.kt"); } + @Test + @TestMetadata("ordinalsWithEnumEntitiesOverrides.kt") + public void testOrdinalsWithEnumEntitiesOverrides() throws Exception { + runTest("compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt"); + } + @Test @TestMetadata("overloadedEnumValues.kt") public void testOverloadedEnumValues() 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 e5fa8cddb4e..2ac764880bb 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 @@ -15150,6 +15150,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt"); } + @Test + @TestMetadata("getEnumEntityByOrdinal.kt") + public void testGetEnumEntityByOrdinal() throws Exception { + runTest("compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt"); + } + @Test @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { @@ -15414,6 +15420,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/enum/ordinal.kt"); } + @Test + @TestMetadata("ordinalsWithEnumEntitiesOverrides.kt") + public void testOrdinalsWithEnumEntitiesOverrides() throws Exception { + runTest("compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt"); + } + @Test @TestMetadata("overloadedEnumValues.kt") public void testOverloadedEnumValues() 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 8711d4295ba..c2a7fc04310 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -12367,6 +12367,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt"); } + @TestMetadata("getEnumEntityByOrdinal.kt") + public void testGetEnumEntityByOrdinal() throws Exception { + runTest("compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt"); + } + @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { runTest("compiler/testData/codegen/box/enum/inPackage.kt"); @@ -12587,6 +12592,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/enum/ordinal.kt"); } + @TestMetadata("ordinalsWithEnumEntitiesOverrides.kt") + public void testOrdinalsWithEnumEntitiesOverrides() throws Exception { + runTest("compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt"); + } + @TestMetadata("overloadedEnumValues.kt") public void testOverloadedEnumValues() throws Exception { runTest("compiler/testData/codegen/box/enum/overloadedEnumValues.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 7c88760b884..5a6284b7e51 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -11036,6 +11036,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt"); } + @TestMetadata("getEnumEntityByOrdinal.kt") + public void testGetEnumEntityByOrdinal() throws Exception { + runTest("compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt"); + } + @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { runTest("compiler/testData/codegen/box/enum/inPackage.kt"); @@ -11226,6 +11231,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/enum/ordinal.kt"); } + @TestMetadata("ordinalsWithEnumEntitiesOverrides.kt") + public void testOrdinalsWithEnumEntitiesOverrides() throws Exception { + runTest("compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt"); + } + @TestMetadata("overloadedEnumValues.kt") public void testOverloadedEnumValues() throws Exception { runTest("compiler/testData/codegen/box/enum/overloadedEnumValues.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 6972c87d501..0e8ee2d48b3 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -10442,6 +10442,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt"); } + @TestMetadata("getEnumEntityByOrdinal.kt") + public void testGetEnumEntityByOrdinal() throws Exception { + runTest("compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt"); + } + @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { runTest("compiler/testData/codegen/box/enum/inPackage.kt"); @@ -10632,6 +10637,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/ordinal.kt"); } + @TestMetadata("ordinalsWithEnumEntitiesOverrides.kt") + public void testOrdinalsWithEnumEntitiesOverrides() throws Exception { + runTest("compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt"); + } + @TestMetadata("overloadedEnumValues.kt") public void testOverloadedEnumValues() throws Exception { runTest("compiler/testData/codegen/box/enum/overloadedEnumValues.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 7704bfc75af..8f39e24174f 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -10407,6 +10407,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt"); } + @TestMetadata("getEnumEntityByOrdinal.kt") + public void testGetEnumEntityByOrdinal() throws Exception { + runTest("compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt"); + } + @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { runTest("compiler/testData/codegen/box/enum/inPackage.kt"); @@ -10597,6 +10602,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/enum/ordinal.kt"); } + @TestMetadata("ordinalsWithEnumEntitiesOverrides.kt") + public void testOrdinalsWithEnumEntitiesOverrides() throws Exception { + runTest("compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt"); + } + @TestMetadata("overloadedEnumValues.kt") public void testOverloadedEnumValues() throws Exception { runTest("compiler/testData/codegen/box/enum/overloadedEnumValues.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index 5c017fee91c..dd39e451b68 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -7186,6 +7186,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/enum/enumWithLambdaParameter.kt"); } + @TestMetadata("getEnumEntityByOrdinal.kt") + public void testGetEnumEntityByOrdinal() throws Exception { + runTest("compiler/testData/codegen/box/enum/getEnumEntityByOrdinal.kt"); + } + @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { runTest("compiler/testData/codegen/box/enum/inPackage.kt"); @@ -7376,6 +7381,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/enum/ordinal.kt"); } + @TestMetadata("ordinalsWithEnumEntitiesOverrides.kt") + public void testOrdinalsWithEnumEntitiesOverrides() throws Exception { + runTest("compiler/testData/codegen/box/enum/ordinalsWithEnumEntitiesOverrides.kt"); + } + @TestMetadata("overloadedEnumValues.kt") public void testOverloadedEnumValues() throws Exception { runTest("compiler/testData/codegen/box/enum/overloadedEnumValues.kt");