From 79ffea63a6aa972ad7e0984df1e63ed722359860 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 8 Aug 2012 17:34:37 +0400 Subject: [PATCH] Proper scope merging for file scope --- .../jet/lang/resolve/lazy/ScopeProvider.java | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java index 85032807bcf..e8e5804147f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java @@ -24,16 +24,11 @@ import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.ImportsResolver; import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler; -import org.jetbrains.jet.lang.resolve.scopes.WritableScope; -import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl; - -import java.util.List; +import org.jetbrains.jet.lang.resolve.scopes.*; /** -* @author abreslav -*/ + * @author abreslav + */ public class ScopeProvider { private final ResolveSession resolveSession; @@ -58,9 +53,10 @@ public class ScopeProvider { throw new IllegalStateException("Package not found: " + fqName + " maybe the file is not in scope of this resolve session: " + file.getName()); } - WritableScope writableScope = new WritableScopeImpl( + WritableScope fileScope = new WritableScopeImpl( JetScope.EMPTY, packageDescriptor, RedeclarationHandler.DO_NOTHING, "File scope for declaration resolution"); - writableScope.changeLockLevel(WritableScope.LockLevel.BOTH); + + fileScope.changeLockLevel(WritableScope.LockLevel.BOTH); NamespaceDescriptor rootPackageDescriptor = resolveSession.getPackageDescriptorByFqName(FqName.ROOT); if (rootPackageDescriptor == null) { @@ -69,19 +65,18 @@ public class ScopeProvider { // Don't import twice if (!packageDescriptor.getQualifiedName().equals(FqName.ROOT)) { - writableScope.importScope(rootPackageDescriptor.getMemberScope()); + fileScope.importScope(rootPackageDescriptor.getMemberScope()); } - ImportsResolver.processImportsInFile(true, writableScope, Lists.newArrayList(file.getImportDirectives()), + ImportsResolver.processImportsInFile(true, fileScope, Lists.newArrayList(file.getImportDirectives()), rootPackageDescriptor.getMemberScope(), resolveSession.getModuleConfiguration(), resolveSession.getTrace(), resolveSession.getInjector().getQualifiedExpressionResolver()); - writableScope.importScope(packageDescriptor.getMemberScope()); + fileScope.changeLockLevel(WritableScope.LockLevel.READING); - writableScope.changeLockLevel(WritableScope.LockLevel.READING); // TODO: Cache - return writableScope; + return new ChainedScope(packageDescriptor, packageDescriptor.getMemberScope(), fileScope); } @NotNull @@ -109,4 +104,4 @@ public class ScopeProvider { throw new IllegalStateException("Don't call this method for local declarations: " + jetDeclaration + " " + jetDeclaration.getText()); } } -} +} \ No newline at end of file