From 5ef329b7133c90431d83152f2e3e600a060d49ba Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 27 Mar 2014 17:46:50 +0400 Subject: [PATCH] Store scope for body resolution in ScriptDescriptor --- .../jetbrains/jet/cli/jvm/repl/ReplInterpreter.java | 1 - .../jet/lang/resolve/BodiesResolveContext.java | 3 --- .../jet/lang/resolve/CachedBodiesResolveContext.java | 7 ------- .../jetbrains/jet/lang/resolve/ImportsResolver.java | 2 +- .../jet/lang/resolve/ScriptBodyResolver.java | 2 +- .../jet/lang/resolve/ScriptHeaderResolver.java | 6 +++--- .../jet/lang/resolve/TopDownAnalysisContext.java | 7 ------- .../jet/lang/descriptors/ScriptDescriptor.java | 4 ++++ .../jet/lang/descriptors/ScriptDescriptorImpl.java | 12 ++++++++++++ .../jet/plugin/project/ResolveElementCache.java | 5 ----- 10 files changed, 21 insertions(+), 28 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java index c023c769543..83f97b5128d 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java @@ -131,7 +131,6 @@ public class ReplInterpreter { } private static void prepareForTheNextReplLine(@NotNull TopDownAnalysisContext c) { - c.getScriptScopes().clear(); c.getScripts().clear(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodiesResolveContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodiesResolveContext.java index 96620c3c27a..61ff61ff16f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodiesResolveContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodiesResolveContext.java @@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.storage.ExceptionTracker; import org.jetbrains.jet.storage.StorageManager; @@ -56,8 +55,6 @@ public interface BodiesResolveContext extends GlobalContext { Function getDeclaringScopes(); @Mutable Map getScripts(); - @Mutable - Map getScriptScopes(); DataFlowInfo getOuterDataFlowInfo(); @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/CachedBodiesResolveContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/CachedBodiesResolveContext.java index 59fc98586a9..55572a660e2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/CachedBodiesResolveContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/CachedBodiesResolveContext.java @@ -46,7 +46,6 @@ public class CachedBodiesResolveContext implements BodiesResolveContext { private final Map functions; private final Function declaringScopes; private final Map scripts; - private final Map scriptScopes; private final DataFlowInfo outerDataFlowInfo; private @NotNull TopDownAnalysisParameters topDownAnalysisParameters; @@ -58,7 +57,6 @@ public class CachedBodiesResolveContext implements BodiesResolveContext { functions = Collections.unmodifiableMap(context.getFunctions()); declaringScopes = context.getDeclaringScopes(); scripts = Collections.unmodifiableMap(context.getScripts()); - scriptScopes = Collections.unmodifiableMap(context.getScriptScopes()); outerDataFlowInfo = context.getOuterDataFlowInfo(); topDownAnalysisParameters = context.getTopDownAnalysisParameters(); @@ -106,11 +104,6 @@ public class CachedBodiesResolveContext implements BodiesResolveContext { return scripts; } - @Override - public Map getScriptScopes() { - return scriptScopes; - } - @Override public DataFlowInfo getOuterDataFlowInfo() { return outerDataFlowInfo; 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 a50adfad09b..75fc1165efe 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java @@ -80,7 +80,7 @@ public class ImportsResolver { } // SCRIPT: process script import directives for (JetScript script : c.getScripts().keySet()) { - WritableScope scriptScope = c.getScriptScopes().get(script); + WritableScope scriptScope = ((ScriptDescriptorImpl) c.getScripts().get(script)).getScopeForBodyResolution(); processImportsInFile(lookupMode, scriptScope, script.getImportDirectives(), true); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java index 3839ad5a7db..592f3bb1ed3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java @@ -69,7 +69,7 @@ public class ScriptBodyResolver { for (Map.Entry e : c.getScripts().entrySet()) { JetScript declaration = e.getKey(); ScriptDescriptorImpl descriptor = (ScriptDescriptorImpl) e.getValue(); - WritableScope scope = c.getScriptScopes().get(declaration); + WritableScope scope = descriptor.getScopeForBodyResolution(); // TODO: lock in resolveScriptDeclarations scope.changeLockLevel(WritableScope.LockLevel.READING); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptHeaderResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptHeaderResolver.java index a3358070f86..8a63e94e56c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptHeaderResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptHeaderResolver.java @@ -107,12 +107,12 @@ public class ScriptHeaderResolver { FqName nameForScript = ScriptNameUtil.classNameForScript((JetFile) script.getContainingFile()); Name className = nameForScript.shortName(); - ScriptDescriptor scriptDescriptor = new ScriptDescriptorImpl(ns, priority, outerScope, className); + ScriptDescriptorImpl scriptDescriptor = new ScriptDescriptorImpl(ns, priority, outerScope, className); WritableScopeImpl scriptScope = new WritableScopeImpl(outerScope, scriptDescriptor, RedeclarationHandler.DO_NOTHING, "script"); scriptScope.changeLockLevel(WritableScope.LockLevel.BOTH); + scriptDescriptor.setScopeForBodyResolution(scriptScope); - c.getScriptScopes().put(script, scriptScope); c.getScripts().put(script, scriptDescriptor); trace.record(BindingContext.SCRIPT, script, scriptDescriptor); @@ -129,7 +129,7 @@ public class ScriptHeaderResolver { for (Map.Entry e : c.getScripts().entrySet()) { JetScript declaration = e.getKey(); ScriptDescriptorImpl descriptor = (ScriptDescriptorImpl) e.getValue(); - WritableScope scope = c.getScriptScopes().get(declaration); + WritableScope scope = descriptor.getScopeForBodyResolution(); List valueParameters = Lists.newArrayList(); 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 7ccd71af97f..21b4099960e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java @@ -58,7 +58,6 @@ public class TopDownAnalysisContext implements BodiesResolveContext { public final Map normalScope = Maps.newHashMap(); private final Map scripts = Maps.newLinkedHashMap(); - private final Map scriptScopes = Maps.newHashMap(); private StringBuilder debugOutput; @@ -148,12 +147,6 @@ public class TopDownAnalysisContext implements BodiesResolveContext { return scripts; } - @Override - @NotNull - public Map getScriptScopes() { - return scriptScopes; - } - public Map getPrimaryConstructorParameterProperties() { return primaryConstructorParameterProperties; } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java index 88c2c811d4d..c01c2b15a56 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.annotations.Annotated; import org.jetbrains.jet.lang.descriptors.impl.ScriptCodeDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.lang.resolve.scopes.JetScope; public interface ScriptDescriptor extends Annotated, DeclarationDescriptor, DeclarationDescriptorNonRoot { String LAST_EXPRESSION_VALUE_FIELD_NAME = "rv"; @@ -35,4 +36,7 @@ public interface ScriptDescriptor extends Annotated, DeclarationDescriptor, Decl @NotNull ClassDescriptor getClassDescriptor(); + + @NotNull + JetScope getScopeForBodyResolution(); } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptorImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptorImpl.java index ee31d136957..0b271537f82 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptorImpl.java @@ -52,6 +52,7 @@ public class ScriptDescriptorImpl extends DeclarationDescriptorNonRootImpl imple private final ClassDescriptorImpl classDescriptor; private final WritableScopeImpl classScope; + private WritableScope scopeForBodyResolution; public ScriptDescriptorImpl( @NotNull DeclarationDescriptor containingDeclaration, @@ -175,4 +176,15 @@ public class ScriptDescriptorImpl extends DeclarationDescriptorNonRootImpl imple public ClassDescriptor getClassDescriptor() { return classDescriptor; } + + @Override + @NotNull + public WritableScope getScopeForBodyResolution() { + return scopeForBodyResolution; + } + + public void setScopeForBodyResolution(@NotNull WritableScope scopeForBodyResolution) { + assert this.scopeForBodyResolution == null : "Scope for body resolution already set for " + this; + this.scopeForBodyResolution = scopeForBodyResolution; + } } diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java index ca1c7b494e7..9fee9eeb42d 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java +++ b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java @@ -482,11 +482,6 @@ public class ResolveElementCache { return Collections.emptyMap(); } - @Override - public Map getScriptScopes() { - return Collections.emptyMap(); - } - @Override public DataFlowInfo getOuterDataFlowInfo() { return DataFlowInfo.EMPTY;