[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( fun ConeClassLikeType.delegatingConstructorScope(
useSiteSession: FirSession, useSiteSession: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
derivedClassLookupTag: ConeClassLikeLookupTag? derivedClassLookupTag: ConeClassLikeLookupTag
): FirTypeScope? { ): FirTypeScope? {
return classScope(useSiteSession, scopeSession, FirResolvePhase.DECLARATIONS, derivedClassLookupTag) 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? { private fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession, requiredPhase: FirResolvePhase): FirTypeScope? {
return when (this) { return when (this) {
is ConeErrorType -> null is ConeErrorType -> null
is ConeClassLikeType -> classScope(useSiteSession, scopeSession, requiredPhase, derivedClassLookupTag = null) is ConeClassLikeType -> classScope(useSiteSession, scopeSession, requiredPhase, lookupTag)
is ConeTypeParameterType -> { is ConeTypeParameterType -> {
val symbol = lookupTag.symbol val symbol = lookupTag.symbol
scopeSession.getOrBuild(symbol, TYPE_PARAMETER_SCOPE_KEY) { scopeSession.getOrBuild(symbol, TYPE_PARAMETER_SCOPE_KEY) {
@@ -100,7 +100,7 @@ private fun ConeClassLikeType.classScope(
useSiteSession: FirSession, useSiteSession: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
requiredPhase: FirResolvePhase, requiredPhase: FirResolvePhase,
derivedClassLookupTag: ConeClassLikeLookupTag? memberOwnerLookupTag: ConeClassLikeLookupTag
): FirTypeScope? { ): FirTypeScope? {
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
@@ -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? { private fun ConeClassLikeType.obtainFirOfClass(useSiteSession: FirSession, requiredPhase: FirResolvePhase): FirClass? {
@@ -111,14 +111,14 @@ fun FirClass.scopeForClass(
substitutor: ConeSubstitutor, substitutor: ConeSubstitutor,
useSiteSession: FirSession, useSiteSession: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
derivedClassLookupTag: ConeClassLikeLookupTag? memberOwnerLookupTag: ConeClassLikeLookupTag
): FirTypeScope = scopeForClassImpl( ): FirTypeScope = scopeForClassImpl(
substitutor, useSiteSession, scopeSession, substitutor, useSiteSession, scopeSession,
skipPrivateMembers = false, skipPrivateMembers = false,
classFirDispatchReceiver = this, classFirDispatchReceiver = this,
// TODO: why it's always false? // TODO: why it's always false?
isFromExpectClass = false, isFromExpectClass = false,
derivedClassLookupTag = derivedClassLookupTag memberOwnerLookupTag = memberOwnerLookupTag
) )
fun ConeKotlinType.scopeForSupertype( fun ConeKotlinType.scopeForSupertype(
@@ -143,7 +143,7 @@ fun ConeKotlinType.scopeForSupertype(
skipPrivateMembers = true, skipPrivateMembers = true,
classFirDispatchReceiver = derivedClass, classFirDispatchReceiver = derivedClass,
isFromExpectClass = (derivedClass as? FirRegularClass)?.isExpect == true, isFromExpectClass = (derivedClass as? FirRegularClass)?.isExpect == true,
derivedClassLookupTag = derivedClass.symbol.toLookupTag() memberOwnerLookupTag = derivedClass.symbol.toLookupTag()
) )
} }
@@ -160,7 +160,7 @@ private fun FirClass.scopeForClassImpl(
skipPrivateMembers: Boolean, skipPrivateMembers: Boolean,
classFirDispatchReceiver: FirClass, classFirDispatchReceiver: FirClass,
isFromExpectClass: Boolean, isFromExpectClass: Boolean,
derivedClassLookupTag: ConeClassLikeLookupTag? memberOwnerLookupTag: ConeClassLikeLookupTag?
): FirTypeScope { ): FirTypeScope {
val basicScope = unsubstitutedScope(useSiteSession, scopeSession, withForcedTypeCalculator = false) val basicScope = unsubstitutedScope(useSiteSession, scopeSession, withForcedTypeCalculator = false)
if (substitutor == ConeSubstitutor.Empty) return basicScope if (substitutor == ConeSubstitutor.Empty) return basicScope
@@ -169,7 +169,7 @@ private fun FirClass.scopeForClassImpl(
classFirDispatchReceiver.symbol.toLookupTag(), classFirDispatchReceiver.symbol.toLookupTag(),
isFromExpectClass, isFromExpectClass,
substitutor, substitutor,
derivedClassLookupTag memberOwnerLookupTag
) )
return scopeSession.getOrBuild(this, key) { return scopeSession.getOrBuild(this, key) {
@@ -180,7 +180,7 @@ private fun FirClass.scopeForClassImpl(
substitutor.substituteOrSelf(classFirDispatchReceiver.defaultType()).lowerBoundIfFlexible() as ConeClassLikeType, substitutor.substituteOrSelf(classFirDispatchReceiver.defaultType()).lowerBoundIfFlexible() as ConeClassLikeType,
skipPrivateMembers, skipPrivateMembers,
makeExpect = isFromExpectClass, makeExpect = isFromExpectClass,
derivedClassLookupTag ?: classFirDispatchReceiver.symbol.toLookupTag() memberOwnerLookupTag ?: classFirDispatchReceiver.symbol.toLookupTag()
) )
} }
} }
@@ -92,7 +92,7 @@ class FirDelegatedMemberScope(
functionSymbol.callableId, functionSymbol.callableId,
), ),
original, original,
derivedClassLookupTag = null, derivedClassLookupTag = dispatchReceiverType.lookupTag,
session, session,
FirDeclarationOrigin.Delegated, FirDeclarationOrigin.Delegated,
newDispatchReceiverType = dispatchReceiverType, newDispatchReceiverType = dispatchReceiverType,
@@ -162,7 +162,7 @@ class FirDelegatedMemberScope(
propertySymbol.callableId propertySymbol.callableId
), ),
original, original,
derivedClassLookupTag = null, derivedClassLookupTag = dispatchReceiverType.lookupTag,
session, session,
FirDeclarationOrigin.Delegated, FirDeclarationOrigin.Delegated,
newModality = Modality.OPEN, newModality = Modality.OPEN,
@@ -361,9 +361,8 @@ class FirTypeIntersectionScopeContext(
) )
val newSymbol = FirIntersectionOverrideFunctionSymbol(callableId, overrides) val newSymbol = FirIntersectionOverrideFunctionSymbol(callableId, overrides)
FirFakeOverrideGenerator.createCopyForFirFunction( FirFakeOverrideGenerator.createCopyForFirFunction(
newSymbol, keyFir, newSymbol, keyFir, derivedClassLookupTag = null, session,
derivedClassLookupTag = null, FirDeclarationOrigin.IntersectionOverride, keyFir.isExpect,
session, FirDeclarationOrigin.IntersectionOverride, keyFir.isExpect,
newModality = newModality, newModality = newModality,
newVisibility = newVisibility, newVisibility = newVisibility,
newDispatchReceiverType = dispatchReceiverType, newDispatchReceiverType = dispatchReceiverType,
@@ -31,7 +31,12 @@ class FirDefaultParametersResolver : FirSessionComponent {
// imported from object case // imported from object case
is FirAbstractImportingScope -> { is FirAbstractImportingScope -> {
val containingClass = function.getContainingClass(session) ?: return false 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 else -> return false
} }
@@ -269,7 +269,7 @@ private fun processConstructors(
substitutor, substitutor,
session, session,
bodyResolveComponents.scopeSession, bodyResolveComponents.scopeSession,
derivedClassLookupTag = null firClass.symbol.toLookupTag()
) )
} }
} }