From 1f23d610a681762ad50e66aa0ae3614e6d8e0688 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 24 Aug 2017 16:34:47 +0300 Subject: [PATCH] Extract TowerResolver.Task::processImplicitReceiver --- .../resolve/calls/tower/TowerResolver.kt | 59 ++++++++++--------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt index 351bea26c1a..d8a472491de 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt @@ -204,33 +204,9 @@ class TowerResolver { .process(scope.mayFitForName(name))?.let { return it } } - val implicitReceiver = implicitScopeTower.getImplicitReceiver(scope) - if (implicitReceiver != null) { - if (name in HIDES_MEMBERS_NAME_LIST) { - // hides members extensions - TowerData.BothTowerLevelAndImplicitReceiver(hidesMembersLevel, implicitReceiver).process()?.let { return it } - } - - // members of implicit receiver or member extension for explicit receiver - TowerData.TowerLevel(MemberScopeTowerLevel(implicitScopeTower, implicitReceiver)) - .process(implicitReceiver.mayFitForName(name))?.let { return it } - - // synthetic properties - TowerData.BothTowerLevelAndImplicitReceiver(syntheticLevel, implicitReceiver).process()?.let { return it } - - // invokeExtension on local variable - TowerData.OnlyImplicitReceiver(implicitReceiver).process()?.let { return it } - - // local extensions for implicit receiver - for (localLevel in localLevels) { - TowerData.BothTowerLevelAndImplicitReceiver(localLevel, implicitReceiver).process()?.let { return it } - } - - // extension for implicit receiver - for (nonLocalLevel in nonLocalLevels) { - TowerData.BothTowerLevelAndImplicitReceiver(nonLocalLevel, implicitReceiver).process()?.let { return it } - } - } + implicitScopeTower.getImplicitReceiver(scope) + ?.let(this::processImplicitReceiver) + ?.let { return it } } else { TowerData.TowerLevel(ImportingScopeBasedTowerLevel(implicitScopeTower, scope as ImportingScope)) @@ -243,6 +219,35 @@ class TowerResolver { return resultCollector.getFinalCandidates() } + private fun processImplicitReceiver(implicitReceiver: ReceiverValueWithSmartCastInfo): Collection? { + if (name in HIDES_MEMBERS_NAME_LIST) { + // hides members extensions + TowerData.BothTowerLevelAndImplicitReceiver(hidesMembersLevel, implicitReceiver).process()?.let { return it } + } + + // members of implicit receiver or member extension for explicit receiver + TowerData.TowerLevel(MemberScopeTowerLevel(implicitScopeTower, implicitReceiver)) + .process(implicitReceiver.mayFitForName(name))?.let { return it } + + // synthetic properties + TowerData.BothTowerLevelAndImplicitReceiver(syntheticLevel, implicitReceiver).process()?.let { return it } + + // invokeExtension on local variable + TowerData.OnlyImplicitReceiver(implicitReceiver).process()?.let { return it } + + // local extensions for implicit receiver + for (localLevel in localLevels) { + TowerData.BothTowerLevelAndImplicitReceiver(localLevel, implicitReceiver).process()?.let { return it } + } + + // extension for implicit receiver + for (nonLocalLevel in nonLocalLevels) { + TowerData.BothTowerLevelAndImplicitReceiver(nonLocalLevel, implicitReceiver).process()?.let { return it } + } + + return null + } + private fun recordLookups() { processor.recordLookups(skippedDataForLookup, name) }