[FIR2IR] Use a fully expanded type when generating IrClassReference

#KT-60639 Fixed
This commit is contained in:
Ivan Kylchik
2023-07-25 18:00:24 +02:00
committed by Space Team
parent 7e5e2fe1e4
commit fe9de6875a
18 changed files with 115 additions and 2 deletions
@@ -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 ->
@@ -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 {
@@ -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 {
@@ -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)
}
@@ -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()
}
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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");