AA FE1.0: make invoke reference handle implicit invoke only

This commit is contained in:
Jinseong Jeon
2022-03-16 13:48:02 -07:00
committed by Ilya Kirillov
parent 06d1acaadd
commit 13b9fed488
@@ -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")
}
}
}