From 642def0133cd0dc76404bb2bcfd5a59d740bfa2e Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 10 Jun 2013 18:40:36 +0400 Subject: [PATCH] Do reference resolution with lazy resolve --- .../jet/plugin/project/WholeProjectAnalyzerFacade.java | 8 ++++++++ .../jetbrains/jet/plugin/references/JetPsiReference.java | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) 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(); }