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) {
for (JetFile file : c.getPackageFragments().keySet()) {
for (JetFile file : c.getFiles()) {
JetPackageDirective packageDirective = file.getPackageDirective();
if (packageDirective == null) continue;
@@ -73,7 +73,7 @@ public class ImportsResolver {
}
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);
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 java.io.PrintStream;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.*;
public class TopDownAnalysisContext implements BodiesResolveContext {
@@ -43,6 +41,7 @@ public class TopDownAnalysisContext implements BodiesResolveContext {
private final Map<JetClassOrObject, ClassDescriptorWithResolutionScopes> classes = Maps.newLinkedHashMap();
protected final Map<JetFile, MutablePackageFragmentDescriptor> packageFragments = Maps.newHashMap();
protected final Set<JetFile> files = new LinkedHashSet<JetFile>();
private List<MutableClassDescriptorLite> classesTopologicalOrder = null;
private final Map<JetDeclaration, JetScope> declaringScopes = Maps.newHashMap();
@@ -136,7 +135,11 @@ public class TopDownAnalysisContext implements BodiesResolveContext {
@Override
public Collection<JetFile> getFiles() {
return packageFragments.keySet();
return files;
}
public void addFile(@NotNull JetFile file) {
files.add(file);
}
@Override
@@ -167,6 +167,9 @@ public class TopDownAnalyzer {
else {
JetPackageDirective packageDirective = file.getPackageDirective();
assert packageDirective != null : "No package in a non-script file: " + file;
c.addFile(file);
DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace);
registerDeclarations(file.getDeclarations());
}
@@ -461,6 +461,7 @@ public class TypeHierarchyResolver {
public void visitJetFile(@NotNull JetFile file) {
MutablePackageFragmentDescriptor packageFragment = getOrCreatePackageFragmentForFile(file);
c.getPackageFragments().put(file, packageFragment);
c.addFile(file);
PackageViewDescriptor packageView = packageFragment.getContainingDeclaration().getPackage(packageFragment.getFqName());
ChainedScope rootPlusPackageScope = new ChainedScope(packageView, "Root scope for " + file, packageView.getMemberScope(), outerScope);