From dee040a5b57be87eee3e32420a3650b8f9701d29 Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Wed, 13 Jan 2016 15:35:37 +0300 Subject: [PATCH] Minor. Extract tower data creation to separate function. --- .../resolve/calls/tower/TowerResolver.kt | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt index 02a8c2ee426..bec24014444 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt @@ -100,38 +100,43 @@ class TowerResolver { return result } + private fun ScopeTower.createTowerDataList(): List = ArrayList().apply { + operator fun TowerData.unaryPlus() = add(this) + + // this Data needs for InvokeProcessors + for (implicitReceiver in implicitReceivers) { + + TowerData.OnlyImplicitReceiver(implicitReceiver) + } + // possible there is explicit member + + TowerData.Empty + + for (level in createLevels()) { + for (implicitReceiver in implicitReceivers) { + + TowerData.BothTowerLevelAndImplicitReceiver(level, implicitReceiver) + } + + TowerData.TowerLevel(level) + } + } + private fun run( context: TowerContext, processor: ScopeTowerProcessor, useOrder: Boolean, resultCollector: ResultCollector ): Collection { - fun collectCandidates(data: TowerData): Collection? { + + for (towerData in context.scopeTower.createTowerDataList()) { val candidatesGroups = if (useOrder) { - processor.process(data) - } - else { - listOf(processor.process(data).flatMap { it }) - } + processor.process(towerData) + } + else { + listOf(processor.process(towerData).flatMap { it }) + } for (candidatesGroup in candidatesGroups) { resultCollector.pushCandidates(candidatesGroup) resultCollector.getSuccessfulCandidates()?.let { return it } } - return null - } - - for (implicitReceiver in context.scopeTower.implicitReceivers) { - collectCandidates(TowerData.OnlyImplicitReceiver(implicitReceiver))?.let { return it } - } - // possible there is explicit member - collectCandidates(TowerData.Empty)?.let { return it } - - for (level in context.scopeTower.createLevels()) { - for (implicitReceiver in context.scopeTower.implicitReceivers) { - collectCandidates(TowerData.BothTowerLevelAndImplicitReceiver(level, implicitReceiver))?.let { return it } - } - collectCandidates(TowerData.TowerLevel(level))?.let { return it } } return resultCollector.getFinalCandidates()