From df1f0886c57f9529d10f0e4cb1d58bd29330b13a Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 25 Mar 2014 22:19:34 +0400 Subject: [PATCH] Inject a project into TDA for proper lazy session initialization --- .../jet/di/InjectorForTopDownAnalyzerForJvm.java | 1 + .../jet/di/InjectorForTopDownAnalyzerBasic.java | 1 + .../jetbrains/jet/lang/resolve/TopDownAnalyzer.java | 10 +++++++++- .../jet/di/InjectorForTopDownAnalyzerForJs.java | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index 69909be4cce..2542a5f49ab 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -191,6 +191,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.topDownAnalyzer.setOverloadResolver(overloadResolver); this.topDownAnalyzer.setOverrideResolver(overrideResolver); this.topDownAnalyzer.setPackageFragmentProvider(mutablePackageFragmentProvider); + this.topDownAnalyzer.setProject(project); this.topDownAnalyzer.setScriptHeaderResolver(scriptHeaderResolver); this.topDownAnalyzer.setTrace(bindingTrace); this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index c607c450d65..88bc7e93606 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -145,6 +145,7 @@ public class InjectorForTopDownAnalyzerBasic { this.topDownAnalyzer.setOverloadResolver(overloadResolver); this.topDownAnalyzer.setOverrideResolver(overrideResolver); this.topDownAnalyzer.setPackageFragmentProvider(mutablePackageFragmentProvider); + this.topDownAnalyzer.setProject(project); this.topDownAnalyzer.setScriptHeaderResolver(scriptHeaderResolver); this.topDownAnalyzer.setTrace(bindingTrace); this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index 20ac2d46c5d..63fa853f2fb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -20,6 +20,7 @@ import com.google.common.base.Predicates; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; +import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import kotlin.Function1; import kotlin.KotlinPackage; @@ -76,6 +77,8 @@ public class TopDownAnalyzer { private BodyResolver bodyResolver; @NotNull private ScriptHeaderResolver scriptHeaderResolver; + @NotNull + private Project project; @Inject public void setTrace(@NotNull BindingTrace trace) { @@ -122,6 +125,11 @@ public class TopDownAnalyzer { this.scriptHeaderResolver = scriptHeaderResolver; } + @Inject + public void setProject(@NotNull Project project) { + this.project = project; + } + public void doProcess( @NotNull final TopDownAnalysisContext c, @NotNull JetScope outerScope, @@ -133,7 +141,7 @@ public class TopDownAnalyzer { if (LAZY && !c.getTopDownAnalysisParameters().isDeclaredLocally()) { final ResolveSession resolveSession = new InjectorForLazyResolve( - declarations.iterator().next().getProject(), // TODO + project, new GlobalContextImpl((LockBasedStorageManager) c.getStorageManager(), c.getExceptionTracker()), // TODO (ModuleDescriptorImpl) moduleDescriptor, // TODO new FileBasedDeclarationProviderFactory(c.getStorageManager(), getFiles(declarations)), diff --git a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java index 6763a5ae249..32a2e8e72be 100644 --- a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -145,6 +145,7 @@ public class InjectorForTopDownAnalyzerForJs { this.topDownAnalyzer.setOverloadResolver(overloadResolver); this.topDownAnalyzer.setOverrideResolver(overrideResolver); this.topDownAnalyzer.setPackageFragmentProvider(mutablePackageFragmentProvider); + this.topDownAnalyzer.setProject(project); this.topDownAnalyzer.setScriptHeaderResolver(scriptHeaderResolver); this.topDownAnalyzer.setTrace(bindingTrace); this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);