From 13b9fed488136cafdd03f2853d37193b4cf21f40 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Wed, 16 Mar 2022 13:48:02 -0700 Subject: [PATCH] AA FE1.0: make invoke reference handle implicit invoke only --- .../KtFe10InvokeFunctionReference.kt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/references/KtFe10InvokeFunctionReference.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/references/KtFe10InvokeFunctionReference.kt index 682b9c7869b..17c9cba2d61 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/references/KtFe10InvokeFunctionReference.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/references/KtFe10InvokeFunctionReference.kt @@ -13,8 +13,11 @@ import org.jetbrains.kotlin.analysis.api.descriptors.references.base.KtFe10Refer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.references.KtInvokeFunctionReference +import org.jetbrains.kotlin.psi.Call import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall +import org.jetbrains.kotlin.resolve.calls.util.getCall import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall abstract class KtFe10InvokeFunctionReference(expression: KtCallExpression) : KtInvokeFunctionReference(expression), KtFe10Reference { @@ -22,8 +25,17 @@ abstract class KtFe10InvokeFunctionReference(expression: KtCallExpression) : KtI require(this is KtFe10AnalysisSession) val bindingContext = analysisContext.analyze(expression, AnalysisMode.PARTIAL) - val descriptor = expression.getResolvedCall(bindingContext)?.resultingDescriptor - return listOfNotNull(descriptor?.toKtCallableSymbol(analysisContext)) + val call = expression.getCall(bindingContext) + val resolvedCall = call.getResolvedCall(bindingContext) + val descriptors = when { + resolvedCall is VariableAsFunctionResolvedCall -> + setOf((resolvedCall as VariableAsFunctionResolvedCall).functionCall.resultingDescriptor) + call != null && resolvedCall != null && call.callType == Call.CallType.INVOKE -> + setOf(resolvedCall.resultingDescriptor) + else -> + emptyList() + } + return descriptors.mapNotNull { it.toKtCallableSymbol(analysisContext) } } } @@ -33,4 +45,4 @@ internal class CliKtFe10InvokeFunctionReference( override fun doRenameImplicitConventionalCall(newName: String?): KtExpression { throw NotImplementedError("Renaming is not supported") } -} \ No newline at end of file +}