FIR IDE: Correctly create KtFunctionalTypeVariableCall when function
call has errors.
This commit is contained in:
committed by
Ilya Kirillov
parent
f7dd6a0f64
commit
ae17cd639b
+18
-16
@@ -11,7 +11,10 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.realPsi
|
||||
import org.jetbrains.kotlin.fir.references.*
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.FirErrorReferenceWithCandidate
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
@@ -104,26 +107,25 @@ internal class KtFirCallResolver(
|
||||
}
|
||||
|
||||
private fun FirFunctionCall.createCallByVariableLikeSymbolCall(variableLikeSymbol: KtVariableLikeSymbol): KtCall? {
|
||||
return when (val callReference = calleeReference) {
|
||||
val (functionSymbol, target) = when (val callReference = calleeReference) {
|
||||
is FirResolvedNamedReference -> {
|
||||
val functionSymbol = callReference.resolvedSymbol as? FirNamedFunctionSymbol
|
||||
val callableId = functionSymbol?.callableId ?: return null
|
||||
(callReference.resolvedSymbol.fir.buildSymbol(firSymbolBuilder) as? KtFunctionSymbol)
|
||||
?.let {
|
||||
if (callableId in kotlinFunctionInvokeCallableIds) {
|
||||
KtFunctionalTypeVariableCall(variableLikeSymbol, createArgumentMapping(), KtSuccessCallTarget(it))
|
||||
} else {
|
||||
KtVariableWithInvokeFunctionCall(variableLikeSymbol, createArgumentMapping(), KtSuccessCallTarget(it))
|
||||
}
|
||||
}
|
||||
(functionSymbol?.fir?.buildSymbol(firSymbolBuilder) as? KtFunctionSymbol)?.let {
|
||||
functionSymbol to KtSuccessCallTarget(it)
|
||||
} ?: return null
|
||||
}
|
||||
is FirErrorNamedReference -> {
|
||||
val functionSymbol = callReference.candidateSymbol as? FirNamedFunctionSymbol
|
||||
functionSymbol to callReference.createErrorCallTarget(source)
|
||||
}
|
||||
is FirErrorNamedReference -> KtVariableWithInvokeFunctionCall(
|
||||
variableLikeSymbol,
|
||||
createArgumentMapping(),
|
||||
callReference.createErrorCallTarget(source)
|
||||
)
|
||||
else -> error("Unexpected call reference ${callReference::class.simpleName}")
|
||||
}
|
||||
val callableId = functionSymbol?.callableId ?: return null
|
||||
return if (callableId in kotlinFunctionInvokeCallableIds) {
|
||||
KtFunctionalTypeVariableCall(variableLikeSymbol, createArgumentMapping(), target)
|
||||
} else {
|
||||
KtVariableWithInvokeFunctionCall(variableLikeSymbol, createArgumentMapping(), target)
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirFunctionCall.asSimpleFunctionCall(): KtFunctionCall? {
|
||||
|
||||
Reference in New Issue
Block a user