From 06389993a9b82361c3a9241425cbe653e0fafe5e Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Wed, 6 Jun 2012 23:58:20 +0400 Subject: [PATCH] do not store root scope in context because context can be used more then once when analyzing REPL --- .../jet/lang/resolve/DeclarationResolver.java | 4 ++-- .../jet/lang/resolve/ImportsResolver.java | 19 ++++++++++--------- .../lang/resolve/TopDownAnalysisContext.java | 11 ----------- .../jet/lang/resolve/TopDownAnalyzer.java | 2 +- .../lang/resolve/TypeHierarchyResolver.java | 3 +-- 5 files changed, 14 insertions(+), 25 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index 155261b4c71..2903b732ac1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -80,11 +80,11 @@ public class DeclarationResolver { - public void process() { + public void process(@NotNull JetScope rootScope) { resolveConstructorHeaders(); resolveAnnotationStubsOnClassesAndConstructors(); resolveFunctionAndPropertyHeaders(); - importsResolver.processMembersImports(); + importsResolver.processMembersImports(rootScope); checkRedeclarationsInNamespaces(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java index aae0f9b5cc6..628e8c585b4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java @@ -68,28 +68,29 @@ public class ImportsResolver { this.qualifiedExpressionResolver = qualifiedExpressionResolver; } - public void processTypeImports() { - processImports(true); + public void processTypeImports(@NotNull JetScope rootScope) { + processImports(true, rootScope); } - public void processMembersImports() { - processImports(false); + public void processMembersImports(@NotNull JetScope rootScope) { + processImports(false, rootScope); } - private void processImports(boolean onlyClasses) { + private void processImports(boolean onlyClasses, @NotNull JetScope rootScope) { for (JetFile file : context.getNamespaceDescriptors().keySet()) { WritableScope namespaceScope = context.getNamespaceScopes().get(file); - processImportsInFile(onlyClasses, namespaceScope, file.getImportDirectives()); + processImportsInFile(onlyClasses, namespaceScope, file.getImportDirectives(), rootScope); } for (JetScript script : context.getScripts().keySet()) { WritableScope scriptScope = context.getScriptScopes().get(script); - processImportsInFile(onlyClasses, scriptScope, script.getImportDirectives()); + processImportsInFile(onlyClasses, scriptScope, script.getImportDirectives(), rootScope); } } - private void processImportsInFile(boolean onlyClasses, WritableScope namespaceScope, List importDirectives) { + private void processImportsInFile( + boolean onlyClasses, WritableScope namespaceScope, + List importDirectives, @NotNull JetScope rootScope) { - JetScope rootScope = context.getRootScope(); Importer.DelayedImporter delayedImporter = new Importer.DelayedImporter(namespaceScope); if (!onlyClasses) { namespaceScope.clearImports(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java index 6901d2434b9..d6a03f85778 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java @@ -36,7 +36,6 @@ public class TopDownAnalysisContext implements BodiesResolveContext { private final Map classes = Maps.newLinkedHashMap(); private final Map objects = Maps.newLinkedHashMap(); - private JetScope rootScope; protected final Map namespaceDescriptors = Maps.newHashMap(); private final Map declaringScopes = Maps.newHashMap(); @@ -114,16 +113,6 @@ public class TopDownAnalysisContext implements BodiesResolveContext { return namespaceScopes; } - public void setRootScope(@NotNull JetScope scope) { - assert rootScope == null; - rootScope = scope; - } - - @NotNull - public JetScope getRootScope() { - return rootScope; - } - public Map getNamespaceDescriptors() { return namespaceDescriptors; } 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 69ace356edc..8ffe011e986 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -156,7 +156,7 @@ public class TopDownAnalyzer { context.debug("Enter"); typeHierarchyResolver.process(outerScope, owner, declarations); - declarationResolver.process(); + declarationResolver.process(outerScope); delegationResolver.process(); overrideResolver.process(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java index ed2118aed7d..9b40bd5dfaf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -96,7 +96,6 @@ public class TypeHierarchyResolver { public void process(@NotNull JetScope outerScope, @NotNull NamespaceLikeBuilder owner, @NotNull Collection declarations) { - context.setRootScope(outerScope); { // TODO: Very temp code - main goal is to remove recursion from collectNamespacesAndClassifiers @@ -131,7 +130,7 @@ public class TypeHierarchyResolver { } } - importsResolver.processTypeImports(); + importsResolver.processTypeImports(outerScope); createTypeConstructors(); // create type constructors for classes and generic parameters, supertypes are not filled in resolveTypesInClassHeaders(); // Generic bounds and types in supertype lists (no expressions or constructor resolution)