Files in TopDownAnalysisContext are stored explicitly

To avoid the necessity of registering mutable package fragments in order to register files
This commit is contained in:
Andrey Breslav
2014-02-19 19:49:16 +04:00
parent 5c7c494235
commit 3e22928666
5 changed files with 13 additions and 6 deletions
@@ -96,7 +96,7 @@ public class DeclarationResolver {
} }
private void checkModifiersAndAnnotationsInPackageDirectives(@NotNull TopDownAnalysisContext c) { private void checkModifiersAndAnnotationsInPackageDirectives(@NotNull TopDownAnalysisContext c) {
for (JetFile file : c.getPackageFragments().keySet()) { for (JetFile file : c.getFiles()) {
JetPackageDirective packageDirective = file.getPackageDirective(); JetPackageDirective packageDirective = file.getPackageDirective();
if (packageDirective == null) continue; if (packageDirective == null) continue;
@@ -73,7 +73,7 @@ public class ImportsResolver {
} }
private void processImports(@NotNull TopDownAnalysisContext c, @NotNull LookupMode lookupMode) { private void processImports(@NotNull TopDownAnalysisContext c, @NotNull LookupMode lookupMode) {
for (JetFile file : c.getPackageFragments().keySet()) { for (JetFile file : c.getFiles()) {
WritableScope fileScope = c.getFileScopes().get(file); WritableScope fileScope = c.getFileScopes().get(file);
processImportsInFile(lookupMode, fileScope, Lists.newArrayList(file.getImportDirectives()), JetPsiUtil.getFQName(file).isRoot()); processImportsInFile(lookupMode, fileScope, Lists.newArrayList(file.getImportDirectives()), JetPsiUtil.getFQName(file).isRoot());
} }
@@ -33,9 +33,7 @@ import org.jetbrains.jet.storage.ExceptionTracker;
import org.jetbrains.jet.storage.StorageManager; import org.jetbrains.jet.storage.StorageManager;
import java.io.PrintStream; import java.io.PrintStream;
import java.util.Collection; import java.util.*;
import java.util.List;
import java.util.Map;
public class TopDownAnalysisContext implements BodiesResolveContext { public class TopDownAnalysisContext implements BodiesResolveContext {
@@ -43,6 +41,7 @@ public class TopDownAnalysisContext implements BodiesResolveContext {
private final Map<JetClassOrObject, ClassDescriptorWithResolutionScopes> classes = Maps.newLinkedHashMap(); private final Map<JetClassOrObject, ClassDescriptorWithResolutionScopes> classes = Maps.newLinkedHashMap();
protected final Map<JetFile, MutablePackageFragmentDescriptor> packageFragments = Maps.newHashMap(); protected final Map<JetFile, MutablePackageFragmentDescriptor> packageFragments = Maps.newHashMap();
protected final Set<JetFile> files = new LinkedHashSet<JetFile>();
private List<MutableClassDescriptorLite> classesTopologicalOrder = null; private List<MutableClassDescriptorLite> classesTopologicalOrder = null;
private final Map<JetDeclaration, JetScope> declaringScopes = Maps.newHashMap(); private final Map<JetDeclaration, JetScope> declaringScopes = Maps.newHashMap();
@@ -136,7 +135,11 @@ public class TopDownAnalysisContext implements BodiesResolveContext {
@Override @Override
public Collection<JetFile> getFiles() { public Collection<JetFile> getFiles() {
return packageFragments.keySet(); return files;
}
public void addFile(@NotNull JetFile file) {
files.add(file);
} }
@Override @Override
@@ -167,6 +167,9 @@ public class TopDownAnalyzer {
else { else {
JetPackageDirective packageDirective = file.getPackageDirective(); JetPackageDirective packageDirective = file.getPackageDirective();
assert packageDirective != null : "No package in a non-script file: " + file; assert packageDirective != null : "No package in a non-script file: " + file;
c.addFile(file);
DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace); DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace);
registerDeclarations(file.getDeclarations()); registerDeclarations(file.getDeclarations());
} }
@@ -461,6 +461,7 @@ public class TypeHierarchyResolver {
public void visitJetFile(@NotNull JetFile file) { public void visitJetFile(@NotNull JetFile file) {
MutablePackageFragmentDescriptor packageFragment = getOrCreatePackageFragmentForFile(file); MutablePackageFragmentDescriptor packageFragment = getOrCreatePackageFragmentForFile(file);
c.getPackageFragments().put(file, packageFragment); c.getPackageFragments().put(file, packageFragment);
c.addFile(file);
PackageViewDescriptor packageView = packageFragment.getContainingDeclaration().getPackage(packageFragment.getFqName()); PackageViewDescriptor packageView = packageFragment.getContainingDeclaration().getPackage(packageFragment.getFqName());
ChainedScope rootPlusPackageScope = new ChainedScope(packageView, "Root scope for " + file, packageView.getMemberScope(), outerScope); ChainedScope rootPlusPackageScope = new ChainedScope(packageView, "Root scope for " + file, packageView.getMemberScope(), outerScope);