FIR checker: carry original candidate in ConeDiagnosticWithCandidates
This is needed by IDE when resolving calls because candidates carry more information than just the targeting symbol.
This commit is contained in:
committed by
Ilya Kirillov
parent
b2e1dfa6db
commit
58067e0a1e
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.analysis.api.fir.annotations.mapAnnotationParameters
|
||||
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirAnnotationValueConverter
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||
@@ -22,7 +23,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||
import org.jetbrains.kotlin.psi.KtCallElement
|
||||
@@ -71,6 +71,7 @@ internal fun ConeDiagnostic.getCandidateSymbols(): Collection<FirBasedSymbol<*>>
|
||||
emptyList()
|
||||
}
|
||||
is ConeDiagnosticWithCandidates -> candidateSymbols
|
||||
is ConeDiagnosticWithSymbol<*> -> listOf(symbol)
|
||||
else -> emptyList()
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -357,7 +357,7 @@ private class ElementsToShortenCollector(
|
||||
return when (this) {
|
||||
is ConeClassErrorType -> when (val diagnostic = this.diagnostic) {
|
||||
// Tolerate code that misses type parameters while shortening it.
|
||||
is ConeUnmatchedTypeArgumentsError -> diagnostic.candidateSymbol.classId
|
||||
is ConeUnmatchedTypeArgumentsError -> diagnostic.symbol.classId
|
||||
else -> null
|
||||
}
|
||||
is ConeClassLikeType -> lookupTag.classId
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ internal object FirReferenceResolveHelper {
|
||||
|
||||
val symbol = resolvedSymbol ?: run {
|
||||
val diagnostic = (this as? FirErrorTypeRef)?.diagnostic
|
||||
(diagnostic as? ConeUnmatchedTypeArgumentsError)?.candidateSymbol
|
||||
(diagnostic as? ConeUnmatchedTypeArgumentsError)?.symbol
|
||||
}
|
||||
|
||||
return symbol?.fir?.buildSymbol(symbolBuilder)
|
||||
|
||||
Reference in New Issue
Block a user