FIR: Extract ReceiverValue.toMemberScopeTowerLevel
This commit is contained in:
+27
-48
@@ -88,6 +88,15 @@ class FirTowerResolver(
|
|||||||
extensionReceiver, extensionsOnly, noInnerConstructors
|
extensionReceiver, extensionsOnly, noInnerConstructors
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private fun ReceiverValue.toMemberScopeTowerLevel(
|
||||||
|
extensionReceiver: ReceiverValue? = null,
|
||||||
|
implicitExtensionInvokeMode: Boolean = false
|
||||||
|
) = MemberScopeTowerLevel(
|
||||||
|
session, components, this,
|
||||||
|
extensionReceiver, implicitExtensionInvokeMode,
|
||||||
|
scopeSession = components.scopeSession
|
||||||
|
)
|
||||||
|
|
||||||
private suspend fun processQualifierScopes(
|
private suspend fun processQualifierScopes(
|
||||||
manager: TowerResolveManager,
|
manager: TowerResolveManager,
|
||||||
info: CallInfo, qualifierReceiver: QualifierReceiver?
|
info: CallInfo, qualifierReceiver: QualifierReceiver?
|
||||||
@@ -248,10 +257,7 @@ class FirTowerResolver(
|
|||||||
emptyTopLevelScopes: MutableSet<FirScope>
|
emptyTopLevelScopes: MutableSet<FirScope>
|
||||||
) {
|
) {
|
||||||
val implicitResult = manager.processLevel(
|
val implicitResult = manager.processLevel(
|
||||||
MemberScopeTowerLevel(
|
receiver.toMemberScopeTowerLevel(), info, parentGroup.Member
|
||||||
session,
|
|
||||||
components, dispatchReceiver = receiver, scopeSession = components.scopeSession
|
|
||||||
), info, parentGroup.Member
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (implicitResult == ProcessorAction.NONE) {
|
if (implicitResult == ProcessorAction.NONE) {
|
||||||
@@ -269,13 +275,8 @@ class FirTowerResolver(
|
|||||||
if (!usable) continue
|
if (!usable) continue
|
||||||
if (implicitDispatchReceiverValue in implicitReceiverValuesWithEmptyScopes) continue
|
if (implicitDispatchReceiverValue in implicitReceiverValuesWithEmptyScopes) continue
|
||||||
manager.processLevel(
|
manager.processLevel(
|
||||||
MemberScopeTowerLevel(
|
implicitDispatchReceiverValue.toMemberScopeTowerLevel(extensionReceiver = receiver),
|
||||||
session,
|
info, parentGroup.Implicit(dispatchDepth)
|
||||||
components,
|
|
||||||
dispatchReceiver = implicitDispatchReceiverValue,
|
|
||||||
extensionReceiver = receiver,
|
|
||||||
scopeSession = components.scopeSession
|
|
||||||
), info, parentGroup.Implicit(dispatchDepth)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,9 +329,7 @@ class FirTowerResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
manager.processLevel(
|
manager.processLevel(
|
||||||
MemberScopeTowerLevel(
|
explicitReceiverValue.toMemberScopeTowerLevel(), info, TowerGroup.Member, ExplicitReceiverKind.DISPATCH_RECEIVER
|
||||||
session, components, dispatchReceiver = explicitReceiverValue, scopeSession = components.scopeSession
|
|
||||||
), info, TowerGroup.Member, ExplicitReceiverKind.DISPATCH_RECEIVER
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val shouldProcessExplicitReceiverScopeOnly =
|
val shouldProcessExplicitReceiverScopeOnly =
|
||||||
@@ -359,16 +358,11 @@ class FirTowerResolver(
|
|||||||
val parentGroup = TowerGroup.Implicit(depth)
|
val parentGroup = TowerGroup.Implicit(depth)
|
||||||
|
|
||||||
manager.processLevel(
|
manager.processLevel(
|
||||||
MemberScopeTowerLevel(
|
implicitReceiverValue.toMemberScopeTowerLevel(extensionReceiver = explicitReceiverValue),
|
||||||
session, components,
|
info, parentGroup.Member, ExplicitReceiverKind.EXTENSION_RECEIVER
|
||||||
dispatchReceiver = implicitReceiverValue, extensionReceiver = explicitReceiverValue,
|
|
||||||
scopeSession = components.scopeSession
|
|
||||||
), info, parentGroup.Member, ExplicitReceiverKind.EXTENSION_RECEIVER
|
|
||||||
)
|
)
|
||||||
manager.processLevelForPropertyWithInvoke(
|
manager.processLevelForPropertyWithInvoke(
|
||||||
MemberScopeTowerLevel(
|
implicitReceiverValue.toMemberScopeTowerLevel(), info, parentGroup.Member
|
||||||
session, components, dispatchReceiver = implicitReceiverValue, scopeSession = components.scopeSession
|
|
||||||
), info, parentGroup.Member
|
|
||||||
)
|
)
|
||||||
for ((localIndex, localScope) in nonEmptyLocalScopes.withIndex()) {
|
for ((localIndex, localScope) in nonEmptyLocalScopes.withIndex()) {
|
||||||
manager.processLevelForPropertyWithInvoke(
|
manager.processLevelForPropertyWithInvoke(
|
||||||
@@ -379,13 +373,8 @@ class FirTowerResolver(
|
|||||||
for ((implicitDispatchReceiverValue, usable, dispatchDepth) in implicitReceivers) {
|
for ((implicitDispatchReceiverValue, usable, dispatchDepth) in implicitReceivers) {
|
||||||
if (!usable) continue
|
if (!usable) continue
|
||||||
manager.processLevelForPropertyWithInvoke(
|
manager.processLevelForPropertyWithInvoke(
|
||||||
MemberScopeTowerLevel(
|
implicitDispatchReceiverValue.toMemberScopeTowerLevel(extensionReceiver = implicitReceiverValue),
|
||||||
session,
|
info, parentGroup.Implicit(dispatchDepth)
|
||||||
components,
|
|
||||||
dispatchReceiver = implicitDispatchReceiverValue,
|
|
||||||
extensionReceiver = implicitReceiverValue,
|
|
||||||
scopeSession = components.scopeSession
|
|
||||||
), info, parentGroup.Implicit(dispatchDepth)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
for ((topIndex, topLevelScope) in topLevelScopes.withIndex()) {
|
for ((topIndex, topLevelScope) in topLevelScopes.withIndex()) {
|
||||||
@@ -432,9 +421,7 @@ class FirTowerResolver(
|
|||||||
manager: TowerResolveManager
|
manager: TowerResolveManager
|
||||||
) {
|
) {
|
||||||
manager.processLevel(
|
manager.processLevel(
|
||||||
MemberScopeTowerLevel(
|
invokeReceiverValue.toMemberScopeTowerLevel(),
|
||||||
session, components, dispatchReceiver = invokeReceiverValue, scopeSession = components.scopeSession
|
|
||||||
),
|
|
||||||
info, TowerGroup.Member,
|
info, TowerGroup.Member,
|
||||||
ExplicitReceiverKind.DISPATCH_RECEIVER,
|
ExplicitReceiverKind.DISPATCH_RECEIVER,
|
||||||
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER
|
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER
|
||||||
@@ -452,11 +439,8 @@ class FirTowerResolver(
|
|||||||
// NB: companions are processed via implicitReceiverValues!
|
// NB: companions are processed via implicitReceiverValues!
|
||||||
val parentGroup = TowerGroup.Implicit(depth)
|
val parentGroup = TowerGroup.Implicit(depth)
|
||||||
manager.processLevel(
|
manager.processLevel(
|
||||||
MemberScopeTowerLevel(
|
implicitReceiverValue.toMemberScopeTowerLevel(extensionReceiver = invokeReceiverValue),
|
||||||
session, components,
|
info, parentGroup.Member,
|
||||||
dispatchReceiver = implicitReceiverValue, extensionReceiver = invokeReceiverValue,
|
|
||||||
scopeSession = components.scopeSession
|
|
||||||
), info, parentGroup.Member,
|
|
||||||
ExplicitReceiverKind.EXTENSION_RECEIVER,
|
ExplicitReceiverKind.EXTENSION_RECEIVER,
|
||||||
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER
|
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER
|
||||||
)
|
)
|
||||||
@@ -478,10 +462,8 @@ class FirTowerResolver(
|
|||||||
manager: TowerResolveManager
|
manager: TowerResolveManager
|
||||||
) {
|
) {
|
||||||
manager.processLevel(
|
manager.processLevel(
|
||||||
MemberScopeTowerLevel(
|
invokeReceiverValue.toMemberScopeTowerLevel(),
|
||||||
session, components, dispatchReceiver = invokeReceiverValue,
|
info, TowerGroup.Member,
|
||||||
scopeSession = components.scopeSession
|
|
||||||
), info, TowerGroup.Member,
|
|
||||||
ExplicitReceiverKind.DISPATCH_RECEIVER,
|
ExplicitReceiverKind.DISPATCH_RECEIVER,
|
||||||
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER
|
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER
|
||||||
)
|
)
|
||||||
@@ -497,12 +479,11 @@ class FirTowerResolver(
|
|||||||
if (!usable) continue
|
if (!usable) continue
|
||||||
val parentGroup = TowerGroup.Implicit(depth)
|
val parentGroup = TowerGroup.Implicit(depth)
|
||||||
manager.processLevel(
|
manager.processLevel(
|
||||||
MemberScopeTowerLevel(
|
invokeReceiverValue.toMemberScopeTowerLevel(
|
||||||
session, components, dispatchReceiver = invokeReceiverValue,
|
|
||||||
extensionReceiver = implicitReceiverValue,
|
extensionReceiver = implicitReceiverValue,
|
||||||
implicitExtensionInvokeMode = true,
|
implicitExtensionInvokeMode = true
|
||||||
scopeSession = components.scopeSession
|
),
|
||||||
), info, parentGroup.InvokeExtension,
|
info, parentGroup.InvokeExtension,
|
||||||
ExplicitReceiverKind.DISPATCH_RECEIVER,
|
ExplicitReceiverKind.DISPATCH_RECEIVER,
|
||||||
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER
|
InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER
|
||||||
)
|
)
|
||||||
@@ -533,8 +514,6 @@ class FirTowerResolver(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
when (val receiver = info.explicitReceiver) {
|
when (val receiver = info.explicitReceiver) {
|
||||||
is FirResolvedQualifier -> manager.enqueueResolverTask { runResolverForQualifierReceiver(info, receiver, manager) }
|
is FirResolvedQualifier -> manager.enqueueResolverTask { runResolverForQualifierReceiver(info, receiver, manager) }
|
||||||
null -> manager.enqueueResolverTask { runResolverForNoReceiver(info, manager) }
|
null -> manager.enqueueResolverTask { runResolverForNoReceiver(info, manager) }
|
||||||
|
|||||||
Reference in New Issue
Block a user