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.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.realPsi
|
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.references.impl.FirSimpleNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirErrorReferenceWithCandidate
|
import org.jetbrains.kotlin.fir.resolve.calls.FirErrorReferenceWithCandidate
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
@@ -104,26 +107,25 @@ internal class KtFirCallResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun FirFunctionCall.createCallByVariableLikeSymbolCall(variableLikeSymbol: KtVariableLikeSymbol): KtCall? {
|
private fun FirFunctionCall.createCallByVariableLikeSymbolCall(variableLikeSymbol: KtVariableLikeSymbol): KtCall? {
|
||||||
return when (val callReference = calleeReference) {
|
val (functionSymbol, target) = when (val callReference = calleeReference) {
|
||||||
is FirResolvedNamedReference -> {
|
is FirResolvedNamedReference -> {
|
||||||
val functionSymbol = callReference.resolvedSymbol as? FirNamedFunctionSymbol
|
val functionSymbol = callReference.resolvedSymbol as? FirNamedFunctionSymbol
|
||||||
val callableId = functionSymbol?.callableId ?: return null
|
(functionSymbol?.fir?.buildSymbol(firSymbolBuilder) as? KtFunctionSymbol)?.let {
|
||||||
(callReference.resolvedSymbol.fir.buildSymbol(firSymbolBuilder) as? KtFunctionSymbol)
|
functionSymbol to KtSuccessCallTarget(it)
|
||||||
?.let {
|
} ?: return null
|
||||||
if (callableId in kotlinFunctionInvokeCallableIds) {
|
}
|
||||||
KtFunctionalTypeVariableCall(variableLikeSymbol, createArgumentMapping(), KtSuccessCallTarget(it))
|
is FirErrorNamedReference -> {
|
||||||
} else {
|
val functionSymbol = callReference.candidateSymbol as? FirNamedFunctionSymbol
|
||||||
KtVariableWithInvokeFunctionCall(variableLikeSymbol, createArgumentMapping(), KtSuccessCallTarget(it))
|
functionSymbol to callReference.createErrorCallTarget(source)
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
is FirErrorNamedReference -> KtVariableWithInvokeFunctionCall(
|
|
||||||
variableLikeSymbol,
|
|
||||||
createArgumentMapping(),
|
|
||||||
callReference.createErrorCallTarget(source)
|
|
||||||
)
|
|
||||||
else -> error("Unexpected call reference ${callReference::class.simpleName}")
|
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? {
|
private fun FirFunctionCall.asSimpleFunctionCall(): KtFunctionCall? {
|
||||||
|
|||||||
Reference in New Issue
Block a user