diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java index 667bff4566a..7bff08d2b24 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java @@ -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;