FIR IDE: consider FirErrorReferenceWithCandidate as reference with error

This commit is contained in:
Ilya Kirillov
2020-12-18 18:06:20 +01:00
parent 9a86d2e10c
commit 306b46b8f2
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.calls.FirErrorReferenceWithCandidate
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.idea.fir.getCandidateSymbols
@@ -93,6 +94,7 @@ internal class KtFirCallResolver(
val target = when (val calleeReference = calleeReference) {
is FirResolvedNamedReference -> calleeReference.getKtFunctionOrConstructorSymbol()?.let { KtSuccessCallTarget(it) }
is FirErrorNamedReference -> calleeReference.createErrorCallTarget()
is FirErrorReferenceWithCandidate -> calleeReference.createErrorCallTarget()
is FirSimpleNamedReference ->
error(
"""
@@ -113,6 +115,12 @@ internal class KtFirCallResolver(
KtSimpleDiagnostic(diagnostic.reason)
)
private fun FirErrorReferenceWithCandidate.createErrorCallTarget(): KtErrorCallTarget =
KtErrorCallTarget(
getCandidateSymbols().mapNotNull { it.fir.buildSymbol(firSymbolBuilder) as? KtFunctionLikeSymbol },
KtSimpleDiagnostic(diagnostic.reason)
)
private fun FirResolvedNamedReference.getKtFunctionOrConstructorSymbol(): KtFunctionLikeSymbol? =
resolvedSymbol.fir.buildSymbol(firSymbolBuilder) as? KtFunctionLikeSymbol