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:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user