From 901336e6e99b56d08f97bc15cea3bcb0da0bcea0 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 14 Mar 2022 16:11:57 +0300 Subject: [PATCH] FIR: handle ambiguity more precisely during constructor processing --- .../kotlin/fir/resolve/calls/ConstructorProcessing.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt index f3a71eaffd2..153f8b2d7d6 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConstructorProcessing.kt @@ -107,8 +107,9 @@ private fun FirScope.getFirstClassifierOrNull( when { isSuccessCandidate && !isSuccessResult -> { - // any result is better than no result + // successful result is better than unsuccessful isSuccessResult = true + isAmbiguousResult = false result = SymbolWithSubstitutor(symbol, substitutor) } result?.symbol === symbol -> { @@ -116,8 +117,12 @@ private fun FirScope.getFirstClassifierOrNull( return@processClassifiersByNameWithSubstitution } result != null -> { - // results are similar => ambiguity - isAmbiguousResult = true + if (isSuccessResult == isSuccessCandidate) { + // results are similar => ambiguity + isAmbiguousResult = true + } else { + // ignore unsuccessful result if we have successful one + } } else -> { // result == null: any result is better than no result