diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt index 8508b959a93..6ec0b3eee31 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.utils.SmartSet abstract class SupertypeSupplier { abstract fun forClass(firClass: FirClass<*>, useSiteSession: FirSession): List - abstract fun expansionForTypeAlias(typeAlias: FirTypeAlias): ConeClassLikeType? + abstract fun expansionForTypeAlias(typeAlias: FirTypeAlias, useSiteSession: FirSession): ConeClassLikeType? object Default : SupertypeSupplier() { override fun forClass(firClass: FirClass<*>, useSiteSession: FirSession): List { @@ -35,7 +35,10 @@ abstract class SupertypeSupplier { return firClass.superConeTypes } - override fun expansionForTypeAlias(typeAlias: FirTypeAlias) = typeAlias.expandedConeType + override fun expansionForTypeAlias(typeAlias: FirTypeAlias, useSiteSession: FirSession): ConeClassLikeType? { + typeAlias.ensureResolved(FirResolvePhase.SUPER_TYPES, useSiteSession) + return typeAlias.expandedConeType + } } } @@ -166,7 +169,7 @@ fun ConeClassLikeType.wrapSubstitutionScopeIfNeed( private fun ConeClassLikeType.computePartialExpansion( useSiteSession: FirSession, supertypeSupplier: SupertypeSupplier -): ConeClassLikeType = fullyExpandedType(useSiteSession, supertypeSupplier::expansionForTypeAlias) +): ConeClassLikeType = fullyExpandedType(useSiteSession) { supertypeSupplier.expansionForTypeAlias(it, useSiteSession) } private fun FirClassifierSymbol<*>.collectSuperTypes( list: MutableList, @@ -217,8 +220,10 @@ private fun FirClassifierSymbol<*>.collectSuperTypes( } } is FirTypeAliasSymbol -> { - val expansion = - supertypeSupplier.expansionForTypeAlias(fir)?.computePartialExpansion(useSiteSession, supertypeSupplier) ?: return + val expansion = supertypeSupplier + .expansionForTypeAlias(fir, useSiteSession) + ?.computePartialExpansion(useSiteSession, supertypeSupplier) + ?: return expansion.lookupTag.toSymbol(useSiteSession) ?.collectSuperTypes(list, visitedSymbols, deep, lookupInterfaces, substituteSuperTypes, useSiteSession, supertypeSupplier) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/TypeExpansionUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/TypeExpansionUtils.kt index 23a896970aa..34130c68f4c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/TypeExpansionUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/TypeExpansionUtils.kt @@ -22,7 +22,10 @@ import org.jetbrains.kotlin.fir.utils.component2 fun ConeClassLikeType.fullyExpandedType( useSiteSession: FirSession, - expandedConeType: (FirTypeAlias) -> ConeClassLikeType? = FirTypeAlias::expandedConeType, + expandedConeType: (FirTypeAlias) -> ConeClassLikeType? = { alias -> + alias.ensureResolved(FirResolvePhase.SUPER_TYPES, useSiteSession) + alias.expandedConeType + }, ): ConeClassLikeType { if (this is ConeClassLikeTypeImpl) { val (cachedSession, cachedExpandedType) = cachedExpandedType @@ -57,7 +60,10 @@ private fun ConeClassLikeType.fullyExpandedTypeNoCache( fun ConeClassLikeType.directExpansionType( useSiteSession: FirSession, - expandedConeType: (FirTypeAlias) -> ConeClassLikeType? = FirTypeAlias::expandedConeType, + expandedConeType: (FirTypeAlias) -> ConeClassLikeType? = { alias -> + alias.ensureResolved(FirResolvePhase.SUPER_TYPES, useSiteSession) + alias.expandedConeType + }, ): ConeClassLikeType? { val typeAliasSymbol = lookupTag.toSymbol(useSiteSession) as? FirTypeAliasSymbol ?: return null val typeAlias = typeAliasSymbol.fir diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt index 74b7fb24d1c..a3fc11f5f9e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt @@ -439,7 +439,7 @@ class SupertypeComputationSession { }.orEmpty() } - override fun expansionForTypeAlias(typeAlias: FirTypeAlias): ConeClassLikeType? { + override fun expansionForTypeAlias(typeAlias: FirTypeAlias, useSiteSession: FirSession): ConeClassLikeType? { if (typeAlias.resolvePhase > FirResolvePhase.SUPER_TYPES) return typeAlias.expandedConeType return (getSupertypesComputationStatus(typeAlias) as? SupertypeComputationStatus.Computed) ?.supertypeRefs diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/firAnnotationUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/firAnnotationUtils.kt index 72e819d83a8..3861c0a6054 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/firAnnotationUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/firAnnotationUtils.kt @@ -20,10 +20,7 @@ import org.jetbrains.kotlin.name.ClassId internal fun FirAnnotationCall.getClassId(session: FirSession): ClassId? = - coneClassLikeType?.fullyExpandedType(session) { alias -> - alias.ensureResolved(FirResolvePhase.SUPER_TYPES, session) - alias.expandedConeType - }?.classId + coneClassLikeType?.fullyExpandedType(session)?.classId internal fun FirRefWithValidityCheck.toAnnotationsList() = withFir { fir -> fir.annotations.map { KtFirAnnotationCall(this, it) }