[FIR] Remove useSiteSession parameter from ensureResolved

This commit is contained in:
Dmitriy Novozhilov
2021-07-07 12:47:17 +03:00
committed by teamcityserver
parent 92cfaf68bb
commit 0f06ab537f
14 changed files with 23 additions and 31 deletions
@@ -200,7 +200,7 @@ object FirExposedVisibilityDeclarationChecker : FirBasicDeclarationChecker() {
): FirMemberDeclaration? { ): FirMemberDeclaration? {
val type = this as? ConeClassLikeType ?: return null val type = this as? ConeClassLikeType ?: return null
val fir = type.fullyExpandedType(context.session).lookupTag.toSymbol(context.session)?.let { firSymbol -> val fir = type.fullyExpandedType(context.session).lookupTag.toSymbol(context.session)?.let { firSymbol ->
firSymbol.ensureResolved(FirResolvePhase.DECLARATIONS, context.session) firSymbol.ensureResolved(FirResolvePhase.DECLARATIONS)
firSymbol.fir firSymbol.fir
} ?: return null } ?: return null
@@ -30,7 +30,7 @@ internal fun ConeKotlinType.unsubstitutedUnderlyingTypeForInlineClass(session: F
?.lookupTag ?.lookupTag
?.toSymbol(session) as? FirRegularClassSymbol ?.toSymbol(session) as? FirRegularClassSymbol
?: return null ?: return null
symbol.ensureResolved(FirResolvePhase.STATUS, session) symbol.ensureResolved(FirResolvePhase.STATUS)
return symbol.fir.getInlineClassUnderlyingParameter()?.returnTypeRef?.coneType return symbol.fir.getInlineClassUnderlyingParameter()?.returnTypeRef?.coneType
} }
@@ -140,7 +140,7 @@ fun BodyResolveComponents.typeForQualifier(resolvedQualifier: FirResolvedQualifi
val classSymbol = resolvedQualifier.symbol val classSymbol = resolvedQualifier.symbol
val resultType = resolvedQualifier.resultType val resultType = resolvedQualifier.resultType
if (classSymbol != null) { if (classSymbol != null) {
classSymbol.ensureResolved(FirResolvePhase.DECLARATIONS, session) classSymbol.ensureResolved(FirResolvePhase.DECLARATIONS)
val declaration = classSymbol.fir val declaration = classSymbol.fir
if (declaration !is FirTypeAlias || resolvedQualifier.typeArguments.isEmpty()) { if (declaration !is FirTypeAlias || resolvedQualifier.typeArguments.isEmpty()) {
typeForQualifierByDeclaration(declaration, resultType, session)?.let { return it } typeForQualifierByDeclaration(declaration, resultType, session)?.let { return it }
@@ -63,7 +63,7 @@ private fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: Scope
val fullyExpandedType = fullyExpandedType(useSiteSession) val fullyExpandedType = fullyExpandedType(useSiteSession)
val fir = fullyExpandedType.lookupTag.toSymbol(useSiteSession)?.fir as? FirClass ?: return null val fir = fullyExpandedType.lookupTag.toSymbol(useSiteSession)?.fir as? FirClass ?: return null
fir.symbol.ensureResolved(requiredPhase, useSiteSession) fir.symbol.ensureResolved(requiredPhase)
val substitution = createSubstitution(fir.typeParameters, fullyExpandedType, useSiteSession) val substitution = createSubstitution(fir.typeParameters, fullyExpandedType, useSiteSession)
@@ -33,13 +33,13 @@ abstract class SupertypeSupplier {
override fun forClass(firClass: FirClass, useSiteSession: FirSession): List<ConeClassLikeType> { override fun forClass(firClass: FirClass, useSiteSession: FirSession): List<ConeClassLikeType> {
if (!firClass.isLocal) { if (!firClass.isLocal) {
// for local classes the phase may not be updated till that moment // for local classes the phase may not be updated till that moment
firClass.ensureResolved(FirResolvePhase.SUPER_TYPES, useSiteSession) firClass.ensureResolved(FirResolvePhase.SUPER_TYPES)
} }
return firClass.superConeTypes return firClass.superConeTypes
} }
override fun expansionForTypeAlias(typeAlias: FirTypeAlias, useSiteSession: FirSession): ConeClassLikeType? { override fun expansionForTypeAlias(typeAlias: FirTypeAlias, useSiteSession: FirSession): ConeClassLikeType? {
typeAlias.ensureResolved(FirResolvePhase.SUPER_TYPES, useSiteSession) typeAlias.ensureResolved(FirResolvePhase.SUPER_TYPES)
return typeAlias.expandedConeType return typeAlias.expandedConeType
} }
} }
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.utils.component2
fun ConeClassLikeType.fullyExpandedType( fun ConeClassLikeType.fullyExpandedType(
useSiteSession: FirSession, useSiteSession: FirSession,
expandedConeType: (FirTypeAlias) -> ConeClassLikeType? = { alias -> expandedConeType: (FirTypeAlias) -> ConeClassLikeType? = { alias ->
alias.ensureResolved(FirResolvePhase.SUPER_TYPES, useSiteSession) alias.ensureResolved(FirResolvePhase.SUPER_TYPES)
alias.expandedConeType alias.expandedConeType
}, },
): ConeClassLikeType { ): ConeClassLikeType {
@@ -61,7 +61,7 @@ private fun ConeClassLikeType.fullyExpandedTypeNoCache(
fun ConeClassLikeType.directExpansionType( fun ConeClassLikeType.directExpansionType(
useSiteSession: FirSession, useSiteSession: FirSession,
expandedConeType: (FirTypeAlias) -> ConeClassLikeType? = { alias -> expandedConeType: (FirTypeAlias) -> ConeClassLikeType? = { alias ->
alias.ensureResolved(FirResolvePhase.SUPER_TYPES, useSiteSession) alias.ensureResolved(FirResolvePhase.SUPER_TYPES)
alias.expandedConeType alias.expandedConeType
}, },
): ConeClassLikeType? { ): ConeClassLikeType? {
@@ -173,7 +173,7 @@ private fun processConstructors(
if (matchedSymbol != null) { if (matchedSymbol != null) {
val scope = when (matchedSymbol) { val scope = when (matchedSymbol) {
is FirTypeAliasSymbol -> { is FirTypeAliasSymbol -> {
matchedSymbol.ensureResolved(FirResolvePhase.TYPES, session) matchedSymbol.ensureResolved(FirResolvePhase.TYPES)
val type = matchedSymbol.fir.expandedTypeRef.coneTypeUnsafe<ConeClassLikeType>().fullyExpandedType(session) val type = matchedSymbol.fir.expandedTypeRef.coneTypeUnsafe<ConeClassLikeType>().fullyExpandedType(session)
val basicScope = type.scope(session, bodyResolveComponents.scopeSession, FakeOverrideTypeCalculator.DoNothing) val basicScope = type.scope(session, bodyResolveComponents.scopeSession, FakeOverrideTypeCalculator.DoNothing)
@@ -70,7 +70,7 @@ class FirSealedClassInheritorsProcessor(
return when (classLikeSymbol) { return when (classLikeSymbol) {
is FirRegularClassSymbol -> classLikeSymbol.fir is FirRegularClassSymbol -> classLikeSymbol.fir
is FirTypeAliasSymbol -> { is FirTypeAliasSymbol -> {
classLikeSymbol.ensureResolved(FirResolvePhase.SUPER_TYPES, symbolProvider.session) classLikeSymbol.ensureResolved(FirResolvePhase.SUPER_TYPES)
extractClassFromTypeRef(symbolProvider, classLikeSymbol.fir.expandedTypeRef) extractClassFromTypeRef(symbolProvider, classLikeSymbol.fir.expandedTypeRef)
} }
else -> null else -> null
@@ -159,7 +159,7 @@ open class FirDesignatedStatusResolveTransformer(
data: FirResolvedDeclarationStatus? data: FirResolvedDeclarationStatus?
): FirStatement { ): FirStatement {
if (shouldSkipClass(regularClass)) return regularClass if (shouldSkipClass(regularClass)) return regularClass
regularClass.symbol.ensureResolved(FirResolvePhase.TYPES, session) regularClass.symbol.ensureResolved(FirResolvePhase.TYPES)
val classLocated = this.classLocated val classLocated = this.classLocated
/* /*
* In designated status resolve we should resolve status only of target class and it's members * In designated status resolve we should resolve status only of target class and it's members
@@ -393,7 +393,7 @@ abstract class AbstractFirStatusResolveTransformer(
private fun forceResolveStatusOfCorrespondingClass(typeRef: FirTypeRef) { private fun forceResolveStatusOfCorrespondingClass(typeRef: FirTypeRef) {
val superClass = typeRef.coneType.toSymbol(session)?.fir val superClass = typeRef.coneType.toSymbol(session)?.fir
superClass?.ensureResolved(FirResolvePhase.SUPER_TYPES, session) superClass?.ensureResolved(FirResolvePhase.SUPER_TYPES)
when (superClass) { when (superClass) {
is FirRegularClass -> forceResolveStatusesOfClass(superClass) is FirRegularClass -> forceResolveStatusesOfClass(superClass)
is FirTypeAlias -> forceResolveStatusOfCorrespondingClass(superClass.expandedTypeRef) is FirTypeAlias -> forceResolveStatusOfCorrespondingClass(superClass.expandedTypeRef)
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.coneTypeSafe
fun FirBasedSymbol<*>.ensureResolvedForCalls( fun FirBasedSymbol<*>.ensureResolvedForCalls(
useSiteSession: FirSession, @Suppress("UNUSED_PARAMETER") useSiteSession: FirSession,
) { ) {
if (fir.resolvePhase >= FirResolvePhase.DECLARATIONS) return if (fir.resolvePhase >= FirResolvePhase.DECLARATIONS) return
@@ -35,7 +35,7 @@ fun FirBasedSymbol<*>.ensureResolvedForCalls(
val requiredPhase = FirResolvePhase.DECLARATIONS val requiredPhase = FirResolvePhase.DECLARATIONS
ensureResolved(requiredPhase, useSiteSession) ensureResolved(requiredPhase)
} }
fun ConeKotlinType.ensureResolvedTypeDeclaration( fun ConeKotlinType.ensureResolvedTypeDeclaration(
@@ -44,8 +44,8 @@ fun ConeKotlinType.ensureResolvedTypeDeclaration(
) { ) {
if (this !is ConeClassLikeType) return if (this !is ConeClassLikeType) return
lookupTag.toSymbol(useSiteSession)?.ensureResolved(requiredPhase, useSiteSession) lookupTag.toSymbol(useSiteSession)?.ensureResolved(requiredPhase)
fullyExpandedType(useSiteSession).lookupTag.toSymbol(useSiteSession)?.ensureResolved(requiredPhase, useSiteSession) fullyExpandedType(useSiteSession).lookupTag.toSymbol(useSiteSession)?.ensureResolved(requiredPhase)
} }
fun FirTypeRef.ensureResolvedTypeDeclaration( fun FirTypeRef.ensureResolvedTypeDeclaration(
@@ -49,7 +49,7 @@ class FirDelegatedMemberScope(
} }
private fun buildScope(delegateField: FirField): FirTypeScope? { private fun buildScope(delegateField: FirField): FirTypeScope? {
delegateField.ensureResolved(FirResolvePhase.TYPES, session) delegateField.ensureResolved(FirResolvePhase.TYPES)
return delegateField.returnTypeRef.coneType.scope(session, scopeSession, FakeOverrideTypeCalculator.DoNothing) return delegateField.returnTypeRef.coneType.scope(session, scopeSession, FakeOverrideTypeCalculator.DoNothing)
} }
@@ -132,8 +132,8 @@ class FirStandardOverrideChecker(private val session: FirSession) : FirAbstractO
val substitutor = buildTypeParametersSubstitutorIfCompatible(overrideCandidate, baseDeclaration) ?: return false val substitutor = buildTypeParametersSubstitutorIfCompatible(overrideCandidate, baseDeclaration) ?: return false
overrideCandidate.ensureResolved(FirResolvePhase.TYPES, useSiteSession = session) overrideCandidate.ensureResolved(FirResolvePhase.TYPES)
baseDeclaration.ensureResolved(FirResolvePhase.TYPES, useSiteSession = session) baseDeclaration.ensureResolved(FirResolvePhase.TYPES)
if (!isEqualReceiverTypes(overrideCandidate.receiverTypeRef, baseDeclaration.receiverTypeRef, substitutor)) return false if (!isEqualReceiverTypes(overrideCandidate.receiverTypeRef, baseDeclaration.receiverTypeRef, substitutor)) return false
@@ -261,7 +261,7 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
is ConeTypeVariableTypeConstructor -> emptyList() is ConeTypeVariableTypeConstructor -> emptyList()
is ConeTypeParameterLookupTag -> symbol.fir.bounds.map { it.coneType } is ConeTypeParameterLookupTag -> symbol.fir.bounds.map { it.coneType }
is ConeClassLikeLookupTag -> { is ConeClassLikeLookupTag -> {
when (val symbol = toClassLikeSymbol().also { it?.ensureResolved(FirResolvePhase.TYPES, session) }) { when (val symbol = toClassLikeSymbol().also { it?.ensureResolved(FirResolvePhase.TYPES) }) {
is FirClassSymbol<*> -> symbol.fir.superConeTypes is FirClassSymbol<*> -> symbol.fir.superConeTypes
is FirTypeAliasSymbol -> listOfNotNull(symbol.fir.expandedConeType) is FirTypeAliasSymbol -> listOfNotNull(symbol.fir.expandedConeType)
else -> listOf(session.builtinTypes.anyType.type) else -> listOf(session.builtinTypes.anyType.type)
@@ -19,20 +19,12 @@ abstract class FirPhaseManager : FirSessionComponent {
val FirSession.phaseManager: FirPhaseManager by FirSession.sessionComponentAccessor() val FirSession.phaseManager: FirPhaseManager by FirSession.sessionComponentAccessor()
fun FirBasedSymbol<*>.ensureResolved( fun FirBasedSymbol<*>.ensureResolved(requiredPhase: FirResolvePhase) {
requiredPhase: FirResolvePhase,
// TODO: Currently, the parameter is unused but it's needed to guarantee that all call-sites are able to supply use-site session
// TODO: Decide which one session should be used and probably get rid of the parameter if use-site session is not needed
@Suppress("UNUSED_PARAMETER") useSiteSession: FirSession,
) {
val session = fir.moduleData.session val session = fir.moduleData.session
val phaseManager = session.phaseManager val phaseManager = session.phaseManager
phaseManager.ensureResolved(this, requiredPhase) phaseManager.ensureResolved(this, requiredPhase)
} }
fun FirDeclaration.ensureResolved( fun FirDeclaration.ensureResolved(requiredPhase: FirResolvePhase) {
requiredPhase: FirResolvePhase, symbol.ensureResolved(requiredPhase)
useSiteSession: FirSession,
) {
symbol.ensureResolved(requiredPhase, useSiteSession)
} }