Support top-down analysis starting from import directives

This commit is contained in:
Andrey Breslav
2014-04-23 19:48:13 +04:00
parent 9f8fd5c5ae
commit 469042dea1
2 changed files with 17 additions and 10 deletions
@@ -138,6 +138,12 @@ public class LazyTopDownAnalyzer {
DescriptorResolver.resolvePackageHeader(directive, moduleDescriptor, trace); DescriptorResolver.resolvePackageHeader(directive, moduleDescriptor, trace);
} }
@Override
public void visitImportDirective(@NotNull JetImportDirective importDirective) {
LazyImportScope importScope = resolveSession.getScopeProvider().getExplicitImportsScopeForFile(importDirective.getContainingJetFile());
importScope.forceResolveImportDirective(importDirective);
}
private void visitClassOrObject(@NotNull JetClassOrObject classOrObject) { private void visitClassOrObject(@NotNull JetClassOrObject classOrObject) {
ClassDescriptorWithResolutionScopes descriptor = ClassDescriptorWithResolutionScopes descriptor =
(ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(classOrObject); (ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(classOrObject);
@@ -26,10 +26,7 @@ import org.jetbrains.annotations.TestOnly;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.psi.JetImportDirective;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.Importer;
import org.jetbrains.jet.lang.resolve.ImportsResolver;
import org.jetbrains.jet.lang.resolve.JetModuleUtil;
import org.jetbrains.jet.lang.resolve.name.LabelName; import org.jetbrains.jet.lang.resolve.name.LabelName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.*; import org.jetbrains.jet.lang.resolve.scopes.*;
@@ -173,13 +170,17 @@ public class LazyImportScope implements JetScope, LazyEntity {
@Override @Override
public void forceResolveAllContents() { public void forceResolveAllContents() {
for (JetImportDirective importDirective : importsProvider.getAllImports()) { for (JetImportDirective importDirective : importsProvider.getAllImports()) {
getImportScope(importDirective, LookupMode.EVERYTHING); forceResolveImportDirective(importDirective);
}
}
ImportResolveStatus status = importedScopesProvider.invoke(importDirective).importResolveStatus; public void forceResolveImportDirective(@NotNull JetImportDirective importDirective) {
if (status != null && !status.descriptors.isEmpty()) { getImportScope(importDirective, LookupMode.EVERYTHING);
JetScope fileScope = resolveSession.getScopeProvider().getFileScope(importDirective.getContainingJetFile());
ImportsResolver.reportUselessImport(importDirective, fileScope, status.descriptors, traceForImportResolve); ImportResolveStatus status = importedScopesProvider.invoke(importDirective).importResolveStatus;
} if (status != null && !status.descriptors.isEmpty()) {
JetScope fileScope = resolveSession.getScopeProvider().getFileScope(importDirective.getContainingJetFile());
ImportsResolver.reportUselessImport(importDirective, fileScope, status.descriptors, traceForImportResolve);
} }
} }