FIR: Extract processScopeForExplicitReceiver

This commit is contained in:
Denis Zharkov
2020-03-26 17:29:22 +03:00
parent 9cd8432c92
commit e936c03839
@@ -334,16 +334,15 @@ class FirTowerResolver(
val nonEmptyLocalScopes = mutableListOf<FirLocalScope>()
for ((index, localScope) in localScopes.withIndex()) {
val result = manager.processLevel(
localScope.toScopeTowerLevel(extensionReceiver = explicitReceiverValue),
info, TowerGroup.Local(index), ExplicitReceiverKind.EXTENSION_RECEIVER
)
if (result != ProcessorAction.NONE) {
if (manager.processScopeForExplicitReceiver(
localScope,
explicitReceiverValue,
info,
TowerGroup.Local(index)
) != ProcessorAction.NONE
) {
nonEmptyLocalScopes += localScope
}
manager.processLevelForPropertyWithInvoke(
localScope.toScopeTowerLevel(), info, TowerGroup.Local(index)
)
}
for ((implicitReceiverValue, usableAsValue, depth) in implicitReceivers) {
@@ -352,17 +351,33 @@ class FirTowerResolver(
}
for ((index, topLevelScope) in topLevelScopes.withIndex()) {
manager.processLevel(
topLevelScope.toScopeTowerLevel(extensionReceiver = explicitReceiverValue),
info, TowerGroup.Top(index), ExplicitReceiverKind.EXTENSION_RECEIVER
)
manager.processLevelForPropertyWithInvoke(
topLevelScope.toScopeTowerLevel(), info, TowerGroup.Top(index)
manager.processScopeForExplicitReceiver(
topLevelScope,
explicitReceiverValue,
info,
TowerGroup.Top(index)
)
}
}
private suspend fun TowerResolveManager.processScopeForExplicitReceiver(
scope: FirScope,
explicitReceiverValue: ExpressionReceiverValue,
info: CallInfo,
towerGroup: TowerGroup,
): ProcessorAction {
val result = processLevel(
scope.toScopeTowerLevel(extensionReceiver = explicitReceiverValue),
info, towerGroup, ExplicitReceiverKind.EXTENSION_RECEIVER
)
processLevelForPropertyWithInvoke(
scope.toScopeTowerLevel(), info, towerGroup
)
return result
}
private suspend fun TowerResolveManager.processMembersForExplicitReceiver(
explicitReceiverValue: ExpressionReceiverValue,
info: CallInfo