FIR checker: report UNSAFE_CALL for overloaded function calls
Previously if an unsafe call is to an overloaded function, FIR checkers report NONE_APPLICABLE. This change instead report them as UNSAFE_CALL or its variants.
This commit is contained in:
committed by
Mikhail Glukhikh
parent
92df1f575a
commit
454ae3b17a
@@ -43,7 +43,7 @@ internal fun FirErrorNamedReference.getCandidateSymbols(): Collection<FirBasedSy
|
||||
when (val diagnostic = diagnostic) {
|
||||
is ConeInapplicableCandidateError -> listOf(diagnostic.candidate.symbol)
|
||||
is ConeHiddenCandidateError -> listOf(diagnostic.candidateSymbol)
|
||||
is ConeAmbiguityError -> diagnostic.candidates
|
||||
is ConeAmbiguityError -> diagnostic.candidates.map { it.symbol }
|
||||
is ConeOperatorAmbiguityError -> diagnostic.candidates
|
||||
is ConeUnsupportedCallableReferenceTarget -> listOf(diagnostic.fir.symbol)
|
||||
else -> emptyList()
|
||||
|
||||
+1
-1
@@ -383,7 +383,7 @@ private class ElementsToShortenCollector(private val shorteningContext: FirShort
|
||||
private fun getSingleUnambiguousCandidate(namedReference: FirErrorNamedReference): FirCallableSymbol<*>? {
|
||||
val coneAmbiguityError = namedReference.diagnostic as? ConeAmbiguityError ?: return null
|
||||
|
||||
val candidates = coneAmbiguityError.candidates.map { it as FirCallableSymbol<*> }
|
||||
val candidates = coneAmbiguityError.candidates.map { it.symbol as FirCallableSymbol<*> }
|
||||
require(candidates.isNotEmpty()) { "Cannot have zero candidates" }
|
||||
|
||||
val distinctCandidates = candidates.distinctBy { it.callableId }
|
||||
|
||||
+5
-2
@@ -15,7 +15,10 @@ import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.references.*
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.*
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeOperatorAmbiguityError
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnmatchedTypeArgumentsError
|
||||
import org.jetbrains.kotlin.fir.resolve.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
@@ -284,7 +287,7 @@ internal object FirReferenceResolveHelper {
|
||||
fun getFirSymbolsByErrorNamedReference(
|
||||
errorNamedReference: FirErrorNamedReference,
|
||||
): Collection<FirBasedSymbol<*>> = when (val diagnostic = errorNamedReference.diagnostic) {
|
||||
is ConeAmbiguityError -> diagnostic.candidates
|
||||
is ConeAmbiguityError -> diagnostic.candidates.map { it.symbol }
|
||||
is ConeOperatorAmbiguityError -> diagnostic.candidates
|
||||
is ConeInapplicableCandidateError -> listOf(diagnostic.candidate.symbol)
|
||||
else -> emptyList()
|
||||
|
||||
Reference in New Issue
Block a user