Find line markers with lazy resolve

This commit is contained in:
Nikolay Krasko
2013-06-10 18:51:57 +04:00
parent 642def0133
commit 94ad93d810
@@ -57,6 +57,8 @@ import org.jetbrains.jet.lang.descriptors.Modality;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils;
import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.plugin.JetBundle;
import org.jetbrains.jet.plugin.codeInsight.JetFunctionPsiElementCellRenderer;
@@ -236,9 +238,24 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
if (!(element instanceof JetNamedFunction || element instanceof JetProperty)) return null;
BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile(file).getBindingContext();
ResolveSession sessionForFile = WholeProjectAnalyzerFacade.getLazyResolveSessionForFile(file);
BindingContext bindingContext;
if ((element instanceof JetNamedFunction && ((JetNamedFunction) element).isLocal()) ||
element instanceof JetProperty && ((JetProperty) element).isLocal()) {
bindingContext = ResolveSessionUtils.resolveToExpression(sessionForFile, (JetElement) element);
}
else {
try {
sessionForFile.resolveToDescriptor((JetDeclaration) element);
bindingContext = sessionForFile.getBindingContext();
} catch (IllegalStateException e) {
return null;
}
}
DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element);
if (!(descriptor instanceof CallableMemberDescriptor)) {
return null;
}
@@ -279,7 +296,7 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
JetFile file = (JetFile)elt.getContainingFile();
assert file != null;
BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile(file).getBindingContext();
BindingContext bindingContext = WholeProjectAnalyzerFacade.getLazyResolveSessionForFile(file).getBindingContext();
DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, elt);
if (!(descriptor instanceof CallableMemberDescriptor)) {
return;