[FIR] When call candidates resolve to errors, select the least bad ones

This fixes a scenario when INVISIBLE_REFERENCE is suppressed, but we
resolved to the wrong overload because when none of the candidates were
applicable, more or less the first one was chosen.

Because we call `fullyProcessCandidate` on the candidates, their
applicability can change which can lead to a situation where the
applicability of a ConeAmbiguityError is different to all its
candidates. The changes in coneDiagnosticToFirDiagnostic.kt account for
that, otherwise code like candidates.first { it.applicability ==
CandidateApplicability.UNSAFE_CALL } can throw NoSuchElementException.

#KT-57776 Fixed
This commit is contained in:
Kirill Rakhman
2023-04-05 17:21:24 +02:00
committed by Space Team
parent 09ea0ef757
commit 592baee852
24 changed files with 345 additions and 52 deletions
@@ -7,7 +7,7 @@ open class A protected constructor(x: Int) {
}
fun foo() {
<!NONE_APPLICABLE!>A<!>()
<!INVISIBLE_REFERENCE!>A<!>()
A(1.0)
}