[FIR IDE] Fix unresolved supertype for typealiases
This commit is contained in:
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.utils.SmartSet
|
||||
|
||||
abstract class SupertypeSupplier {
|
||||
abstract fun forClass(firClass: FirClass<*>, useSiteSession: FirSession): List<ConeClassLikeType>
|
||||
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<ConeClassLikeType> {
|
||||
@@ -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<ConeClassLikeType>,
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-4
@@ -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<FirAnnotatedDeclaration>.toAnnotationsList() = withFir { fir ->
|
||||
fir.annotations.map { KtFirAnnotationCall(this, it) }
|
||||
|
||||
Reference in New Issue
Block a user