From 7fc06558496934b179b419fe5a4f9df5572e3362 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 1 Apr 2020 17:22:32 +0300 Subject: [PATCH] FIR: Refactor CandidateCollector --- .../fir/resolve/calls/CandidateCollector.kt | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt index 17b5996439a..0986ea7d8dd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt @@ -17,49 +17,32 @@ open class CandidateCollector( var currentApplicability = CandidateApplicability.HIDDEN private set - private var currentGroup = TowerGroup.Start + private var bestGroup = TowerGroup.Last fun newDataSet() { groupNumbers.clear() candidates.clear() currentApplicability = CandidateApplicability.HIDDEN + bestGroup = TowerGroup.Last } open fun consumeCandidate(group: TowerGroup, candidate: Candidate): CandidateApplicability { val applicability = resolutionStageRunner.processCandidate(candidate) - if (applicability > currentApplicability) { - groupNumbers.clear() + if (applicability > currentApplicability || (applicability == currentApplicability && group < bestGroup)) { candidates.clear() currentApplicability = applicability - currentGroup = group + bestGroup = group } - if (applicability == currentApplicability) { + if (applicability == currentApplicability && group == bestGroup) { candidates.add(candidate) - groupNumbers.add(group) } return applicability } - fun bestCandidates(): List { - if (groupNumbers.isEmpty()) return emptyList() - if (groupNumbers.size == 1) return candidates - val result = mutableListOf() - var bestGroup = groupNumbers.first() - for ((index, candidate) in candidates.withIndex()) { - val group = groupNumbers[index] - if (bestGroup > group) { - bestGroup = group - result.clear() - } - if (bestGroup == group) { - result.add(candidate) - } - } - return result - } + fun bestCandidates() = candidates fun isSuccess(): Boolean { return currentApplicability >= CandidateApplicability.SYNTHETIC_RESOLVED