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.descriptors.symbols.descriptorBased.base.toKtCallableSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.idea.references.KtInvokeFunctionReference
|
import org.jetbrains.kotlin.idea.references.KtInvokeFunctionReference
|
||||||
|
import org.jetbrains.kotlin.psi.Call
|
||||||
import org.jetbrains.kotlin.psi.KtCallExpression
|
import org.jetbrains.kotlin.psi.KtCallExpression
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
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
|
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
|
||||||
|
|
||||||
abstract class KtFe10InvokeFunctionReference(expression: KtCallExpression) : KtInvokeFunctionReference(expression), KtFe10Reference {
|
abstract class KtFe10InvokeFunctionReference(expression: KtCallExpression) : KtInvokeFunctionReference(expression), KtFe10Reference {
|
||||||
@@ -22,8 +25,17 @@ abstract class KtFe10InvokeFunctionReference(expression: KtCallExpression) : KtI
|
|||||||
require(this is KtFe10AnalysisSession)
|
require(this is KtFe10AnalysisSession)
|
||||||
|
|
||||||
val bindingContext = analysisContext.analyze(expression, AnalysisMode.PARTIAL)
|
val bindingContext = analysisContext.analyze(expression, AnalysisMode.PARTIAL)
|
||||||
val descriptor = expression.getResolvedCall(bindingContext)?.resultingDescriptor
|
val call = expression.getCall(bindingContext)
|
||||||
return listOfNotNull(descriptor?.toKtCallableSymbol(analysisContext))
|
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 {
|
override fun doRenameImplicitConventionalCall(newName: String?): KtExpression {
|
||||||
throw NotImplementedError("Renaming is not supported")
|
throw NotImplementedError("Renaming is not supported")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user