diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/calls/KtCall.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/calls/KtCall.kt index 4454878e2a9..da1d3a5571c 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/calls/KtCall.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/calls/KtCall.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.psi.KtValueArgument */ public sealed class KtCall { public abstract val isErrorCall: Boolean + public abstract val argumentMapping: LinkedHashMap public abstract val targetFunction: KtCallTarget } @@ -28,6 +29,7 @@ public sealed class KtCall { */ public class KtFunctionalTypeVariableCall( public val target: KtVariableLikeSymbol, + override val argumentMapping: LinkedHashMap, override val targetFunction: KtCallTarget ) : KtCall() { override val isErrorCall: Boolean get() = false @@ -52,16 +54,10 @@ public sealed class KtDeclaredFunctionCall : KtCall() { */ public class KtVariableWithInvokeFunctionCall( public val target: KtVariableLikeSymbol, + override val argumentMapping: LinkedHashMap, override val targetFunction: KtCallTarget ) : KtDeclaredFunctionCall() -/** - * Represents a direct function call with arguments - */ -public sealed class KtCallWithArguments : KtDeclaredFunctionCall() { - public abstract val argumentMapping: LinkedHashMap -} - /** * Simple function call, e.g., * @@ -70,7 +66,7 @@ public sealed class KtCallWithArguments : KtDeclaredFunctionCall() { public class KtFunctionCall( override val argumentMapping: LinkedHashMap, override val targetFunction: KtCallTarget -) : KtCallWithArguments() +) : KtDeclaredFunctionCall() /** * Annotation call, e.g., @@ -81,7 +77,7 @@ public class KtFunctionCall( public class KtAnnotationCall( override val argumentMapping: LinkedHashMap, override val targetFunction: KtCallTarget -) : KtCallWithArguments() +) : KtDeclaredFunctionCall() // TODO: Add other properties, e.g., useSiteTarget /** @@ -96,7 +92,7 @@ public class KtDelegatedConstructorCall( override val argumentMapping: LinkedHashMap, override val targetFunction: KtCallTarget, public val kind: KtDelegatedConstructorCallKind -) : KtCallWithArguments() +) : KtDeclaredFunctionCall() public enum class KtDelegatedConstructorCallKind { SUPER_CALL, THIS_CALL } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt index 71d8c07bac8..9c108026287 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt @@ -111,14 +111,15 @@ internal class KtFirCallResolver( (callReference.resolvedSymbol.fir.buildSymbol(firSymbolBuilder) as? KtFunctionSymbol) ?.let { if (callableId in kotlinFunctionInvokeCallableIds) { - KtFunctionalTypeVariableCall(variableLikeSymbol, KtSuccessCallTarget(it)) + KtFunctionalTypeVariableCall(variableLikeSymbol, createArgumentMapping(), KtSuccessCallTarget(it)) } else { - KtVariableWithInvokeFunctionCall(variableLikeSymbol, KtSuccessCallTarget(it)) + KtVariableWithInvokeFunctionCall(variableLikeSymbol, createArgumentMapping(), KtSuccessCallTarget(it)) } } } is FirErrorNamedReference -> KtVariableWithInvokeFunctionCall( variableLikeSymbol, + createArgumentMapping(), callReference.createErrorCallTarget(source) ) else -> error("Unexpected call reference ${callReference::class.simpleName}") diff --git a/idea/idea-frontend-fir/testData/analysisSession/resolveCall/variableAsFunction.txt b/idea/idea-frontend-fir/testData/analysisSession/resolveCall/variableAsFunction.txt index 684dc4a04c5..690f54bab1b 100644 --- a/idea/idea-frontend-fir/testData/analysisSession/resolveCall/variableAsFunction.txt +++ b/idea/idea-frontend-fir/testData/analysisSession/resolveCall/variableAsFunction.txt @@ -1,3 +1,4 @@ KtFunctionalTypeVariableCall: target = x: kotlin.Function1 +argumentMapping = { 1 -> (p1: kotlin.Int) } targetFunction = kotlin/Function1.invoke(p1: kotlin.Int): kotlin.String \ No newline at end of file