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>() val nonEmptyLocalScopes = mutableListOf<FirLocalScope>()
for ((index, localScope) in localScopes.withIndex()) { for ((index, localScope) in localScopes.withIndex()) {
val result = manager.processLevel( if (manager.processScopeForExplicitReceiver(
localScope.toScopeTowerLevel(extensionReceiver = explicitReceiverValue), localScope,
info, TowerGroup.Local(index), ExplicitReceiverKind.EXTENSION_RECEIVER explicitReceiverValue,
) info,
if (result != ProcessorAction.NONE) { TowerGroup.Local(index)
) != ProcessorAction.NONE
) {
nonEmptyLocalScopes += localScope nonEmptyLocalScopes += localScope
} }
manager.processLevelForPropertyWithInvoke(
localScope.toScopeTowerLevel(), info, TowerGroup.Local(index)
)
} }
for ((implicitReceiverValue, usableAsValue, depth) in implicitReceivers) { for ((implicitReceiverValue, usableAsValue, depth) in implicitReceivers) {
@@ -352,17 +351,33 @@ class FirTowerResolver(
} }
for ((index, topLevelScope) in topLevelScopes.withIndex()) { for ((index, topLevelScope) in topLevelScopes.withIndex()) {
manager.processLevel( manager.processScopeForExplicitReceiver(
topLevelScope.toScopeTowerLevel(extensionReceiver = explicitReceiverValue), topLevelScope,
info, TowerGroup.Top(index), ExplicitReceiverKind.EXTENSION_RECEIVER explicitReceiverValue,
) info,
TowerGroup.Top(index)
manager.processLevelForPropertyWithInvoke(
topLevelScope.toScopeTowerLevel(), 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( private suspend fun TowerResolveManager.processMembersForExplicitReceiver(
explicitReceiverValue: ExpressionReceiverValue, explicitReceiverValue: ExpressionReceiverValue,
info: CallInfo info: CallInfo