[FE] Pass the derived class tag to more places (KTIJ-22808)

This commit is contained in:
Yan Zhulanow
2022-11-24 18:49:38 +09:00
committed by Space Team
parent 0e050ae7f1
commit c7f9d7f027
6 changed files with 21 additions and 17 deletions
@@ -47,7 +47,7 @@ fun FirSmartCastExpression.smartcastScope(
fun ConeClassLikeType.delegatingConstructorScope(
useSiteSession: FirSession,
scopeSession: ScopeSession,
derivedClassLookupTag: ConeClassLikeLookupTag?
derivedClassLookupTag: ConeClassLikeLookupTag
): FirTypeScope? {
return classScope(useSiteSession, scopeSession, FirResolvePhase.DECLARATIONS, derivedClassLookupTag)
}
@@ -65,7 +65,7 @@ fun ConeKotlinType.scope(
private fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession, requiredPhase: FirResolvePhase): FirTypeScope? {
return when (this) {
is ConeErrorType -> null
is ConeClassLikeType -> classScope(useSiteSession, scopeSession, requiredPhase, derivedClassLookupTag = null)
is ConeClassLikeType -> classScope(useSiteSession, scopeSession, requiredPhase, lookupTag)
is ConeTypeParameterType -> {
val symbol = lookupTag.symbol
scopeSession.getOrBuild(symbol, TYPE_PARAMETER_SCOPE_KEY) {
@@ -100,7 +100,7 @@ private fun ConeClassLikeType.classScope(
useSiteSession: FirSession,
scopeSession: ScopeSession,
requiredPhase: FirResolvePhase,
derivedClassLookupTag: ConeClassLikeLookupTag?
memberOwnerLookupTag: ConeClassLikeLookupTag
): FirTypeScope? {
val fullyExpandedType = fullyExpandedType(useSiteSession)
val fir = fullyExpandedType.lookupTag.toSymbol(useSiteSession)?.fir as? FirClass ?: return null
@@ -115,7 +115,7 @@ private fun ConeClassLikeType.classScope(
)
}
return fir.scopeForClass(substitutor, useSiteSession, scopeSession, derivedClassLookupTag)
return fir.scopeForClass(substitutor, useSiteSession, scopeSession, memberOwnerLookupTag)
}
private fun ConeClassLikeType.obtainFirOfClass(useSiteSession: FirSession, requiredPhase: FirResolvePhase): FirClass? {
@@ -111,14 +111,14 @@ fun FirClass.scopeForClass(
substitutor: ConeSubstitutor,
useSiteSession: FirSession,
scopeSession: ScopeSession,
derivedClassLookupTag: ConeClassLikeLookupTag?
memberOwnerLookupTag: ConeClassLikeLookupTag
): FirTypeScope = scopeForClassImpl(
substitutor, useSiteSession, scopeSession,
skipPrivateMembers = false,
classFirDispatchReceiver = this,
// TODO: why it's always false?
isFromExpectClass = false,
derivedClassLookupTag = derivedClassLookupTag
memberOwnerLookupTag = memberOwnerLookupTag
)
fun ConeKotlinType.scopeForSupertype(
@@ -143,7 +143,7 @@ fun ConeKotlinType.scopeForSupertype(
skipPrivateMembers = true,
classFirDispatchReceiver = derivedClass,
isFromExpectClass = (derivedClass as? FirRegularClass)?.isExpect == true,
derivedClassLookupTag = derivedClass.symbol.toLookupTag()
memberOwnerLookupTag = derivedClass.symbol.toLookupTag()
)
}
@@ -160,7 +160,7 @@ private fun FirClass.scopeForClassImpl(
skipPrivateMembers: Boolean,
classFirDispatchReceiver: FirClass,
isFromExpectClass: Boolean,
derivedClassLookupTag: ConeClassLikeLookupTag?
memberOwnerLookupTag: ConeClassLikeLookupTag?
): FirTypeScope {
val basicScope = unsubstitutedScope(useSiteSession, scopeSession, withForcedTypeCalculator = false)
if (substitutor == ConeSubstitutor.Empty) return basicScope
@@ -169,7 +169,7 @@ private fun FirClass.scopeForClassImpl(
classFirDispatchReceiver.symbol.toLookupTag(),
isFromExpectClass,
substitutor,
derivedClassLookupTag
memberOwnerLookupTag
)
return scopeSession.getOrBuild(this, key) {
@@ -180,7 +180,7 @@ private fun FirClass.scopeForClassImpl(
substitutor.substituteOrSelf(classFirDispatchReceiver.defaultType()).lowerBoundIfFlexible() as ConeClassLikeType,
skipPrivateMembers,
makeExpect = isFromExpectClass,
derivedClassLookupTag ?: classFirDispatchReceiver.symbol.toLookupTag()
memberOwnerLookupTag ?: classFirDispatchReceiver.symbol.toLookupTag()
)
}
}
@@ -92,7 +92,7 @@ class FirDelegatedMemberScope(
functionSymbol.callableId,
),
original,
derivedClassLookupTag = null,
derivedClassLookupTag = dispatchReceiverType.lookupTag,
session,
FirDeclarationOrigin.Delegated,
newDispatchReceiverType = dispatchReceiverType,
@@ -162,7 +162,7 @@ class FirDelegatedMemberScope(
propertySymbol.callableId
),
original,
derivedClassLookupTag = null,
derivedClassLookupTag = dispatchReceiverType.lookupTag,
session,
FirDeclarationOrigin.Delegated,
newModality = Modality.OPEN,
@@ -361,9 +361,8 @@ class FirTypeIntersectionScopeContext(
)
val newSymbol = FirIntersectionOverrideFunctionSymbol(callableId, overrides)
FirFakeOverrideGenerator.createCopyForFirFunction(
newSymbol, keyFir,
derivedClassLookupTag = null,
session, FirDeclarationOrigin.IntersectionOverride, keyFir.isExpect,
newSymbol, keyFir, derivedClassLookupTag = null, session,
FirDeclarationOrigin.IntersectionOverride, keyFir.isExpect,
newModality = newModality,
newVisibility = newVisibility,
newDispatchReceiverType = dispatchReceiverType,
@@ -31,7 +31,12 @@ class FirDefaultParametersResolver : FirSessionComponent {
// imported from object case
is FirAbstractImportingScope -> {
val containingClass = function.getContainingClass(session) ?: return false
containingClass.scopeForClass(ConeSubstitutor.Empty, session, scopeSession, derivedClassLookupTag = null)
containingClass.scopeForClass(
ConeSubstitutor.Empty,
session,
scopeSession,
containingClass.symbol.toLookupTag()
)
}
else -> return false
}
@@ -269,7 +269,7 @@ private fun processConstructors(
substitutor,
session,
bodyResolveComponents.scopeSession,
derivedClassLookupTag = null
firClass.symbol.toLookupTag()
)
}
}