From 1bb036bb80f768ff6983e6fa0d1a8a5c92be9faa Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 8 Aug 2013 19:16:08 +0400 Subject: [PATCH] Get reference for invoke calls with lazy resolve --- .../references/JetInvokeFunctionReference.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetInvokeFunctionReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetInvokeFunctionReference.java index a06a23d76d4..d1969715f21 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetInvokeFunctionReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetInvokeFunctionReference.java @@ -23,7 +23,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.JetCallExpression; -import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetValueArgumentList; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; @@ -54,15 +54,16 @@ class JetInvokeFunctionReference extends JetPsiReference implements MultiRangeRe @Override protected PsiElement doResolve() { - BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile( - (JetFile) getElement().getContainingFile()).getBindingContext(); - ResolvedCall invokeFunction = - bindingContext.get(RESOLVED_CALL, ((JetCallExpression) myExpression).getCalleeExpression()); + JetExpression calleeExpression = ((JetCallExpression) myExpression).getCalleeExpression(); + BindingContext bindingContext = WholeProjectAnalyzerFacade.getContextForElement(myExpression); + + ResolvedCall invokeFunction = bindingContext.get(RESOLVED_CALL, calleeExpression); + if (invokeFunction != null && invokeFunction instanceof VariableAsFunctionResolvedCall) { FunctionDescriptor resultingDescriptor = ((VariableAsFunctionResolvedCall) invokeFunction).getResultingDescriptor(); - PsiElement invokeFunctionElement = BindingContextUtils.callableDescriptorToDeclaration(bindingContext, resultingDescriptor); - return invokeFunctionElement; + return BindingContextUtils.callableDescriptorToDeclaration(bindingContext, resultingDescriptor); } + return null; }