AA FE1.0: make invoke reference handle implicit invoke only
This commit is contained in:
committed by
Ilya Kirillov
parent
06d1acaadd
commit
13b9fed488
+15
-3
@@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user