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);
}
@Override
public void visitImportDirective(@NotNull JetImportDirective importDirective) {
LazyImportScope importScope = resolveSession.getScopeProvider().getExplicitImportsScopeForFile(importDirective.getContainingJetFile());
importScope.forceResolveImportDirective(importDirective);
}
private void visitClassOrObject(@NotNull JetClassOrObject classOrObject) {
ClassDescriptorWithResolutionScopes descriptor =
(ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(classOrObject);
@@ -26,10 +26,7 @@ import org.jetbrains.annotations.TestOnly;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetImportDirective;
import org.jetbrains.jet.lang.resolve.BindingTrace;
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.*;
import org.jetbrains.jet.lang.resolve.name.LabelName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.*;
@@ -173,13 +170,17 @@ public class LazyImportScope implements JetScope, LazyEntity {
@Override
public void forceResolveAllContents() {
for (JetImportDirective importDirective : importsProvider.getAllImports()) {
getImportScope(importDirective, LookupMode.EVERYTHING);
forceResolveImportDirective(importDirective);
}
}
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);
}
public void forceResolveImportDirective(@NotNull JetImportDirective importDirective) {
getImportScope(importDirective, LookupMode.EVERYTHING);
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);
}
}