[FE] Pass the derived class tag to more places (KTIJ-22808)
This commit is contained in:
@@ -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? {
|
||||||
|
|||||||
+6
-6
@@ -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()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -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,
|
||||||
|
|||||||
+2
-3
@@ -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,
|
||||||
|
|||||||
+6
-1
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -269,7 +269,7 @@ private fun processConstructors(
|
|||||||
substitutor,
|
substitutor,
|
||||||
session,
|
session,
|
||||||
bodyResolveComponents.scopeSession,
|
bodyResolveComponents.scopeSession,
|
||||||
derivedClassLookupTag = null
|
firClass.symbol.toLookupTag()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user