KT-47475 Do not copy InnerClass attribute for WhenMapping classes
diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/ObjectTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/ObjectTransformer.kt
index 626766f..3cd637f 100644
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/ObjectTransformer.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/ObjectTransformer.kt
@@ -83,6 +83,13 @@
methodNodes.add(this)
}
}
+
+ override fun visitInnerClass(name: String?, outerName: String?, innerName: String?, access: Int) {
+ // Drop the attribute as the recreated class is not an inner class of the original outer class.
+ // In principle, we could also generate a new attribute with outerName set to the caller-side class,
+ // but that would require modification of both the inner (recreated) and the outer (caller-side) classes.
+ // The latter would require a lot of work without any clear benefits.
+ }
}, ClassReader.SKIP_FRAMES)
assert(methodNodes.size == 1) {
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 f1d2d52..3ab2dda 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
@@ -50276,6 +50276,12 @@
}
@Test
+ @TestMetadata("kt47475.kt")
+ public void testKt47475() throws Exception {
+ runTest("compiler/testData/codegen/box/when/kt47475.kt");
+ }
+
+ @Test
@TestMetadata("kt5307.kt")
public void testKt5307() throws Exception {
runTest("compiler/testData/codegen/box/when/kt5307.kt");
diff --git a/compiler/testData/codegen/box/when/kt47475.kt b/compiler/testData/codegen/box/when/kt47475.kt
new file mode 100644
index 0000000..569e7ab
--- /dev/null
+++ b/compiler/testData/codegen/box/when/kt47475.kt
@@ -0,0 +1,27 @@
+// TARGET_BACKEND: JVM
+// CHECK_BYTECODE_TEXT
+
+// MODULE: lib
+// FILE: lib.kt
+
+enum class SomeEnum{A, B}
+
+inline fun inlineEnumWhen(someEnum: SomeEnum) = when(someEnum) {
+ SomeEnum.A -> "A"
+ else -> "not A"
+}
+
+// JVM_IR_TEMPLATES
+// 2 INNERCLASS
+
+// MODULE: caller(lib)
+// FILE: caller.kt
+
+fun box(): String {
+ inlineEnumWhen(SomeEnum.A)
+ val mappings = Class.forName("CallerKt\$box\$\$inlined\$inlineEnumWhen\$1\$wm\$LibKt\$WhenMappings")
+ return if (mappings.enclosingClass == null) "OK" else "FAIL"
+}
+
+// JVM_IR_TEMPLATES
+// 0 INNERCLASS
\ No newline at end of file
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 0dd6c72..0f2af66 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
@@ -48740,6 +48740,12 @@
}
@Test
+ @TestMetadata("kt47475.kt")
+ public void testKt47475() throws Exception {
+ runTest("compiler/testData/codegen/box/when/kt47475.kt");
+ }
+
+ @Test
@TestMetadata("kt5307.kt")
public void testKt5307() throws Exception {
runTest("compiler/testData/codegen/box/when/kt5307.kt");
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 68a2784..d1f1fe3 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
@@ -50276,6 +50276,12 @@
}
@Test
+ @TestMetadata("kt47475.kt")
+ public void testKt47475() throws Exception {
+ runTest("compiler/testData/codegen/box/when/kt47475.kt");
+ }
+
+ @Test
@TestMetadata("kt5307.kt")
public void testKt5307() throws Exception {
runTest("compiler/testData/codegen/box/when/kt5307.kt");
diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
index c142cff..58225e2 100644
--- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
+++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
@@ -39608,6 +39608,11 @@
runTest("compiler/testData/codegen/box/when/kt47365.kt");
}
+ @TestMetadata("kt47475.kt")
+ public void testKt47475() throws Exception {
+ runTest("compiler/testData/codegen/box/when/kt47475.kt");
+ }
+
@TestMetadata("kt5307.kt")
public void testKt5307() throws Exception {
runTest("compiler/testData/codegen/box/when/kt5307.kt");