From fe9de6875a708a093900f0458d218a91c237d4d7 Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Tue, 25 Jul 2023 18:00:24 +0200 Subject: [PATCH] [FIR2IR] Use a fully expanded type when generating `IrClassReference` #KT-60639 Fixed --- .../kotlin/fir/backend/Fir2IrVisitor.kt | 3 ++- ...LightTreeBlackBoxCodegenTestGenerated.java | 6 ++++++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 ++++++ .../kotlin/fir/resolve/TypeExpansionUtils.kt | 6 +++++- .../box/typealias/typeAliasOnTypeAlias.kt | 19 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++++++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 6 ++++++ .../LightAnalysisModeTestGenerated.java | 5 +++++ .../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/FirWasmCodegenBoxTestGenerated.java | 6 ++++++ .../test/K1WasmCodegenBoxTestGenerated.java | 6 ++++++ 18 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index 905e9a291fc..19c4ce6b77d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression import org.jetbrains.kotlin.fir.extensions.extensionService import org.jetbrains.kotlin.fir.references.* +import org.jetbrains.kotlin.fir.resolve.fullyExpandedConeType import org.jetbrains.kotlin.fir.resolve.isIteratorNext import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.impl.* @@ -1435,7 +1436,7 @@ class Fir2IrVisitor( classifierStorage.getIrClassSymbol(symbol) } is FirTypeAliasSymbol -> { - symbol.fir.expandedConeType.toIrClassSymbol() + symbol.fir.fullyExpandedConeType(session).toIrClassSymbol() } else -> return getClassCall.convertWithOffsets { startOffset, endOffset -> 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 ea1a29e4cbe..ecfc0a91e9e 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 @@ -52175,6 +52175,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 177b75c90c9..eff65bd5233 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 @@ -52175,6 +52175,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() throws Exception { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/TypeExpansionUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/TypeExpansionUtils.kt index c5b89891e90..6b48b3a9fa9 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/TypeExpansionUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/TypeExpansionUtils.kt @@ -10,8 +10,8 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirTypeAlias import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor -import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol +import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl @@ -166,3 +166,7 @@ private fun mapTypeAliasArguments( return substitutor.substituteOrSelf(resultingType) } + +fun FirTypeAlias.fullyExpandedConeType(useSiteSession: FirSession): ConeClassLikeType? { + return expandedConeType?.fullyExpandedType(useSiteSession) +} diff --git a/compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt b/compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt new file mode 100644 index 00000000000..32ce6e4f29a --- /dev/null +++ b/compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt @@ -0,0 +1,19 @@ +// ISSUE: KT-60639 + +import kotlin.reflect.KClass + +interface A + +typealias OtherA = A +typealias OtherOtherA = OtherA + +annotation class Ann(vararg val kClass: KClass<*>) + +@Ann(A::class, OtherA::class, OtherOtherA::class) +class Test { + fun get() = "OK" +} + +fun box(): String { + return Test().get() +} \ 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 bbbc7be42de..d9378a9b9be 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 @@ -49295,6 +49295,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 7873820aa9a..06097213897 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 @@ -52175,6 +52175,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 510729cfce9..82b8af9db59 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 @@ -52175,6 +52175,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 74cd58c4690..9f038513d43 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -42083,6 +42083,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() throws Exception { runTest("compiler/testData/codegen/box/typealias/typeAliasSecondaryConstructor.kt"); 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 4b436ce80e0..8a8fc46f3c4 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 @@ -36215,6 +36215,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 bd14e6a84ef..d480c4b5c92 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 @@ -36215,6 +36215,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 d6706fd0243..2b3e2a662e2 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 @@ -36215,6 +36215,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 e765f28fe3f..bdf8576daa5 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 @@ -39661,6 +39661,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 541db5b373f..515f471014a 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 @@ -40687,6 +40687,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 66dcf335480..9bb937960ab 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 @@ -39149,6 +39149,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() 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 86386729c4e..d11c4f6f77d 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 @@ -39662,6 +39662,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java index e3ca83feff1..da670c13c39 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java @@ -35885,6 +35885,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() throws Exception { diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java index 10b676014be..81a6395bb34 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/K1WasmCodegenBoxTestGenerated.java @@ -35885,6 +35885,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest runTest("compiler/testData/codegen/box/typealias/typeAliasObjectCallable.kt"); } + @Test + @TestMetadata("typeAliasOnTypeAlias.kt") + public void testTypeAliasOnTypeAlias() throws Exception { + runTest("compiler/testData/codegen/box/typealias/typeAliasOnTypeAlias.kt"); + } + @Test @TestMetadata("typeAliasSecondaryConstructor.kt") public void testTypeAliasSecondaryConstructor() throws Exception {