diff --git a/idea/src/org/jetbrains/jet/plugin/project/WholeProjectAnalyzerFacade.java b/idea/src/org/jetbrains/jet/plugin/project/WholeProjectAnalyzerFacade.java index 8f63403dd45..594e2259fd9 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/WholeProjectAnalyzerFacade.java +++ b/idea/src/org/jetbrains/jet/plugin/project/WholeProjectAnalyzerFacade.java @@ -18,8 +18,11 @@ package org.jetbrains.jet.plugin.project; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.analyzer.AnalyzeExhaust; +import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; +import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils; public final class WholeProjectAnalyzerFacade { @@ -35,4 +38,9 @@ public final class WholeProjectAnalyzerFacade { public static ResolveSession getLazyResolveSessionForFile(@NotNull JetFile file) { return AnalyzerFacadeWithCache.getLazyResolveSession(file); } + + public static BindingContext getContextForExpression(@NotNull JetExpression jetExpression) { + ResolveSession resolveSession = getLazyResolveSessionForFile((JetFile) jetExpression.getContainingFile()); + return ResolveSessionUtils.resolveToExpression(resolveSession, jetExpression); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java index 4583af18d50..1dbfffcf912 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java @@ -102,16 +102,16 @@ public abstract class JetPsiReference implements PsiPolyVariantReference { @Nullable protected PsiElement doResolve() { - JetFile file = (JetFile) getElement().getContainingFile(); - BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile(file).getBindingContext(); - List psiElements = BindingContextUtils.resolveToDeclarationPsiElements(bindingContext, myExpression); + BindingContext context = WholeProjectAnalyzerFacade.getContextForExpression(myExpression); + + List psiElements = BindingContextUtils.resolveToDeclarationPsiElements(context, myExpression); if (psiElements.size() == 1) { return psiElements.iterator().next(); } if (psiElements.size() > 1) { return null; } - Collection stdlibSymbols = resolveStandardLibrarySymbol(bindingContext); + Collection stdlibSymbols = resolveStandardLibrarySymbol(context); if (stdlibSymbols.size() == 1) { return stdlibSymbols.iterator().next(); }