From bb8ff9e2994b155b59076fb317fa76b23ad87e5e Mon Sep 17 00:00:00 2001 From: strangepleasures Date: Wed, 10 Jan 2024 14:20:09 +0000 Subject: [PATCH] KT-62584 Fix generation of type arguments for local classes Merge-request: KT-MR-13684 Merged-by: Pavel Mikhailovskii --- ...LFirBlackBoxCodegenBasedTestGenerated.java | 6 +++ ...rsedBlackBoxCodegenBasedTestGenerated.java | 6 +++ ...LightTreeBlackBoxCodegenTestGenerated.java | 6 +++ ...hIrFakeOverrideGeneratorTestGenerated.java | 6 +++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 +++ .../backend/jvm/mapping/IrTypeMapping.kt | 2 +- .../genericConstructorReference.jvm_abi.txt | 13 ------ .../genericConstructorReference.kt | 2 - ...LocalClassConstructorReference.jvm_abi.txt | 13 ------ .../genericLocalClassConstructorReference.kt | 2 - .../box/innerNested/kt62584.jvm_abi.txt | 15 +++++++ .../codegen/box/innerNested/kt62584.kt | 45 +++++++++++++++++++ .../JvmAbiConsistencyTestBoxGenerated.java | 6 +++ .../IrBlackBoxCodegenTestGenerated.java | 6 +++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 6 +++ .../LightAnalysisModeTestGenerated.java | 5 +++ 16 files changed, 114 insertions(+), 31 deletions(-) delete mode 100644 compiler/testData/codegen/box/callableReference/genericConstructorReference.jvm_abi.txt delete mode 100644 compiler/testData/codegen/box/callableReference/genericLocalClassConstructorReference.jvm_abi.txt create mode 100644 compiler/testData/codegen/box/innerNested/kt62584.jvm_abi.txt create mode 100644 compiler/testData/codegen/box/innerNested/kt62584.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index f654ccaefdb..f468384f4f2 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -28406,6 +28406,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/innerNested/kt5363.kt"); } + @Test + @TestMetadata("kt62584.kt") + public void testKt62584() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/kt62584.kt"); + } + @Test @TestMetadata("kt63732.kt") public void testKt63732() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index c7b38db2fb8..60318d179a5 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -28406,6 +28406,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/innerNested/kt5363.kt"); } + @Test + @TestMetadata("kt62584.kt") + public void testKt62584() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/kt62584.kt"); + } + @Test @TestMetadata("kt63732.kt") public void testKt63732() throws Exception { 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 4af509daac3..bb2b315d69e 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 @@ -28063,6 +28063,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/innerNested/kt5363.kt"); } + @Test + @TestMetadata("kt62584.kt") + public void testKt62584() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/kt62584.kt"); + } + @Test @TestMetadata("kt63732.kt") public void testKt63732() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java index 8446e83c6cd..efa02bf4a8e 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java @@ -28063,6 +28063,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/innerNested/kt5363.kt"); } + @Test + @TestMetadata("kt62584.kt") + public void testKt62584() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/kt62584.kt"); + } + @Test @TestMetadata("kt63732.kt") public void testKt63732() 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 aa2145fb991..6cad58c380d 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 @@ -28063,6 +28063,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/innerNested/kt5363.kt"); } + @Test + @TestMetadata("kt62584.kt") + public void testKt62584() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/kt62584.kt"); + } + @Test @TestMetadata("kt63732.kt") public void testKt63732() throws Exception { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/IrTypeMapping.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/IrTypeMapping.kt index 4dd3258093a..e1a8e337255 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/IrTypeMapping.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/IrTypeMapping.kt @@ -72,7 +72,7 @@ private fun IrSimpleType.buildPossiblyInnerType(classifier: IrClass?, index: Int "${arguments.size - toIndex} trailing arguments were found in this type: ${render()}" } - return PossiblyInnerIrType(classifier, arguments.subList(index, arguments.size), null) + return PossiblyInnerIrType(classifier, arguments.subList(index, toIndex), null) } val argumentsSubList = arguments.subList(index, toIndex) diff --git a/compiler/testData/codegen/box/callableReference/genericConstructorReference.jvm_abi.txt b/compiler/testData/codegen/box/callableReference/genericConstructorReference.jvm_abi.txt deleted file mode 100644 index 55f4aba0542..00000000000 --- a/compiler/testData/codegen/box/callableReference/genericConstructorReference.jvm_abi.txt +++ /dev/null @@ -1,13 +0,0 @@ -MODULE main - CLASS Outer$Inner$p$1.class - Property: class.signature - K1 - Lkotlin/jvm/internal/FunctionReferenceImpl;Lkotlin/jvm/functions/Function2;>; - K2 - Lkotlin/jvm/internal/FunctionReferenceImpl;Lkotlin/jvm/functions/Function2;>; - METHOD invoke(Ljava/lang/Object;Ljava/lang/Object;)LOuter$Inner$p$PLocal; - Property: method.signature - K1 - (TPT;TPT;)LOuter$Inner$p$PLocal; - K2 - (TPT;TPT;)LOuter$Inner$p$PLocal; diff --git a/compiler/testData/codegen/box/callableReference/genericConstructorReference.kt b/compiler/testData/codegen/box/callableReference/genericConstructorReference.kt index c2ea649f6e2..ceb9090e24e 100644 --- a/compiler/testData/codegen/box/callableReference/genericConstructorReference.kt +++ b/compiler/testData/codegen/box/callableReference/genericConstructorReference.kt @@ -1,5 +1,3 @@ -// JVM_ABI_K1_K2_DIFF: KT-62584 - // KT-42025 open class L(val ll: LL) diff --git a/compiler/testData/codegen/box/callableReference/genericLocalClassConstructorReference.jvm_abi.txt b/compiler/testData/codegen/box/callableReference/genericLocalClassConstructorReference.jvm_abi.txt deleted file mode 100644 index fec468a870a..00000000000 --- a/compiler/testData/codegen/box/callableReference/genericLocalClassConstructorReference.jvm_abi.txt +++ /dev/null @@ -1,13 +0,0 @@ -MODULE main - CLASS GenericLocalClassConstructorReferenceKt$p$1.class - Property: class.signature - K1 - Lkotlin/jvm/internal/FunctionReferenceImpl;Lkotlin/jvm/functions/Function2;>; - K2 - Lkotlin/jvm/internal/FunctionReferenceImpl;Lkotlin/jvm/functions/Function2;>; - METHOD invoke(Ljava/lang/Object;Ljava/lang/Object;)LGenericLocalClassConstructorReferenceKt$p$PLocal; - Property: method.signature - K1 - (TPT;TPT;)LGenericLocalClassConstructorReferenceKt$p$PLocal; - K2 - (TPT;TPT;)LGenericLocalClassConstructorReferenceKt$p$PLocal; diff --git a/compiler/testData/codegen/box/callableReference/genericLocalClassConstructorReference.kt b/compiler/testData/codegen/box/callableReference/genericLocalClassConstructorReference.kt index b082b974634..3b42bc859f2 100644 --- a/compiler/testData/codegen/box/callableReference/genericLocalClassConstructorReference.kt +++ b/compiler/testData/codegen/box/callableReference/genericLocalClassConstructorReference.kt @@ -1,5 +1,3 @@ -// JVM_ABI_K1_K2_DIFF: KT-62584 - // KT-42025 open class L(val ll: LL) diff --git a/compiler/testData/codegen/box/innerNested/kt62584.jvm_abi.txt b/compiler/testData/codegen/box/innerNested/kt62584.jvm_abi.txt new file mode 100644 index 00000000000..f968140956f --- /dev/null +++ b/compiler/testData/codegen/box/innerNested/kt62584.jvm_abi.txt @@ -0,0 +1,15 @@ +MODULE main + CLASS C$bar$L2.class + CLASS METADATA + Property: class.metadata.superTypes + K1 + [.C$bar$L1] + K2 + [.C$bar$L1] + CLASS Kt62584Kt$baz$L2.class + CLASS METADATA + Property: class.metadata.superTypes + K1 + [.Kt62584Kt$baz$L1] + K2 + [.Kt62584Kt$baz$L1] diff --git a/compiler/testData/codegen/box/innerNested/kt62584.kt b/compiler/testData/codegen/box/innerNested/kt62584.kt new file mode 100644 index 00000000000..bdffb8a5dc6 --- /dev/null +++ b/compiler/testData/codegen/box/innerNested/kt62584.kt @@ -0,0 +1,45 @@ +// TARGET_BACKEND: JVM_IR +// IGNORE_BACKEND: ANDROID +// WITH_STDLIB +// JVM_ABI_K1_K2_DIFF: KT-62584 + +// For some reason, the tests fails on Android. Might be caused by obfuscation. + +class C { + open inner class I1 + inner class I2 : I1() + + fun foo(): Any = I2() + + fun bar(): Any { + open class L1 + class L2 : L1() + + return L2() + } +} + +val C.property: Any + get() { + open class L1 + class L2 : L1() + return L2() + } + +fun C.baz(): Any { + open class L1 + class L2 : L1() + return L2() +} + +fun box(): String { + val fooSignature = C().foo().javaClass.genericSuperclass.toString() + if (fooSignature != "C\$I1") return fooSignature + val barSignature = C().bar().javaClass.genericSuperclass.toString() + if (barSignature != "class C\$bar\$L1") return barSignature + val bazSignature = C().baz().javaClass.genericSuperclass.toString() + if (bazSignature != "Kt62584Kt\$baz\$L1") return bazSignature + val propertySignature = C().property.javaClass.genericSuperclass.toString() + if (propertySignature != "Kt62584Kt\$property\$L1") return propertySignature + return "OK" +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java index d029cabd702..b38763d903f 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java @@ -28063,6 +28063,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/innerNested/kt5363.kt"); } + @Test + @TestMetadata("kt62584.kt") + public void testKt62584() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/kt62584.kt"); + } + @Test @TestMetadata("kt63732.kt") public void testKt63732() 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 f93c97bfd5b..86bb91d35a7 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 @@ -28063,6 +28063,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/innerNested/kt5363.kt"); } + @Test + @TestMetadata("kt62584.kt") + public void testKt62584() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/kt62584.kt"); + } + @Test @TestMetadata("kt63732.kt") public void testKt63732() 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 563dc0a5ce9..267224f3236 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 @@ -28063,6 +28063,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/innerNested/kt5363.kt"); } + @Test + @TestMetadata("kt62584.kt") + public void testKt62584() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/kt62584.kt"); + } + @Test @TestMetadata("kt63732.kt") public void testKt63732() 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 34c639b0b52..b8e64210d91 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -23663,6 +23663,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/innerNested/kt5363.kt"); } + @TestMetadata("kt62584.kt") + public void testKt62584() throws Exception { + runTest("compiler/testData/codegen/box/innerNested/kt62584.kt"); + } + @TestMetadata("kt63732.kt") public void testKt63732() throws Exception { runTest("compiler/testData/codegen/box/innerNested/kt63732.kt");