From 469042dea14cdf535ba85d86ad6644c6bd3463c9 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 23 Apr 2014 19:48:13 +0400 Subject: [PATCH] Support top-down analysis starting from import directives --- .../jet/lang/resolve/LazyTopDownAnalyzer.java | 6 ++++++ .../lang/resolve/lazy/LazyImportScope.java | 21 ++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java index c6110c700b3..71a1d86304a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java @@ -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); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.java index 01336df92b3..a8798fc7f63 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.java @@ -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); } }