diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ScopeTowerProcessors.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ScopeTowerProcessors.kt index 22815d3cc61..fc59c88c473 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ScopeTowerProcessors.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ScopeTowerProcessors.kt @@ -64,15 +64,23 @@ internal class ExplicitReceiverScopeTowerProcessor( } private fun resolveAsMember(): Collection { - val members = - MemberScopeTowerLevel(scopeTower, explicitReceiver) - .collectCandidates(null).filter { !it.requiresExtensionReceiver } - return members.map { candidateFactory.createCandidate(it, ExplicitReceiverKind.DISPATCH_RECEIVER, extensionReceiver = null) } + val members = mutableListOf() + for (memberCandidate in MemberScopeTowerLevel(scopeTower, explicitReceiver).collectCandidates(null)) { + if (!memberCandidate.requiresExtensionReceiver) { + members.add(candidateFactory.createCandidate(memberCandidate, ExplicitReceiverKind.DISPATCH_RECEIVER, extensionReceiver = null)) + } + } + return members } private fun resolveAsExtension(level: ScopeTowerLevel): Collection { - val extensions = level.collectCandidates(explicitReceiver).filter { it.requiresExtensionReceiver } - return extensions.map { candidateFactory.createCandidate(it, ExplicitReceiverKind.EXTENSION_RECEIVER, extensionReceiver = explicitReceiver) } + val extensions = mutableListOf() + for (extensionCandidate in level.collectCandidates(explicitReceiver)) { + if (extensionCandidate.requiresExtensionReceiver) { + extensions.add(candidateFactory.createCandidate(extensionCandidate, ExplicitReceiverKind.EXTENSION_RECEIVER, extensionReceiver = explicitReceiver)) + } + } + return extensions } } @@ -85,9 +93,12 @@ private class QualifierScopeTowerProcessor( override fun simpleProcess(data: TowerData): Collection { if (data != TowerData.Empty) return emptyList() - val staticMembers = QualifierScopeTowerLevel(scopeTower, qualifier).collectCandidates(null) - .filter { !it.requiresExtensionReceiver } - .map { candidateFactory.createCandidate(it, ExplicitReceiverKind.NO_EXPLICIT_RECEIVER, extensionReceiver = null) } + val staticMembers = mutableListOf() + for (towerCandidate in QualifierScopeTowerLevel(scopeTower, qualifier).collectCandidates(null)) { + if (!towerCandidate.requiresExtensionReceiver) { + staticMembers.add(candidateFactory.createCandidate(towerCandidate, ExplicitReceiverKind.NO_EXPLICIT_RECEIVER, extensionReceiver = null)) + } + } return staticMembers } } @@ -99,19 +110,21 @@ private class NoExplicitReceiverScopeTowerProcessor( override fun simpleProcess(data: TowerData): Collection = when(data) { is TowerData.TowerLevel -> { - data.level.collectCandidates(null).filter { !it.requiresExtensionReceiver }.map { - candidateFactory.createCandidate(it, ExplicitReceiverKind.NO_EXPLICIT_RECEIVER, extensionReceiver = null) + val result = mutableListOf() + for (towerCandidate in data.level.collectCandidates(null)) { + if (!towerCandidate.requiresExtensionReceiver) { + result.add(candidateFactory.createCandidate(towerCandidate, ExplicitReceiverKind.NO_EXPLICIT_RECEIVER, extensionReceiver = null)) + } } + result } is TowerData.BothTowerLevelAndImplicitReceiver -> { val result = mutableListOf() - - data.level.collectCandidates(data.implicitReceiver).filter { it.requiresExtensionReceiver }.forEach { - result.add( - candidateFactory.createCandidate( - it, ExplicitReceiverKind.NO_EXPLICIT_RECEIVER, extensionReceiver = data.implicitReceiver)) + for (towerCandidate in data.level.collectCandidates(data.implicitReceiver)) { + if (towerCandidate.requiresExtensionReceiver) { + result.add(candidateFactory.createCandidate(towerCandidate, ExplicitReceiverKind.NO_EXPLICIT_RECEIVER, extensionReceiver = data.implicitReceiver)) + } } - result } else -> emptyList()