From 81f2f79c796860e4e882bfe3a35564fd7e981ffe Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 26 Feb 2014 21:39:30 +0400 Subject: [PATCH] Import directives are resolved in lazy mode --- .../jet/lang/resolve/ImportsResolver.java | 21 +++++++++++---- .../jet/lang/resolve/TopDownAnalyzer.java | 7 +++++ .../lang/resolve/lazy/LazyImportScope.java | 27 ++++++++++++------- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java index 68598923041..a46f56b30bf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java @@ -125,11 +125,8 @@ public class ImportsResolver { resolvedDirectives.put(importDirective, descriptors); } - JetExpression importedReference = importDirective.getImportedReference(); - if (lookupMode != LookupMode.ONLY_CLASSES && importedReference != null) { - for (DeclarationDescriptor descriptor : descriptors) { - reportPlatformClassMappedToKotlin(module, trace, importedReference, descriptor); - } + if (lookupMode != LookupMode.ONLY_CLASSES) { + checkPlatformTypesMappedToKotlin(module, trace, importDirective, descriptors); } } delayedImporter.processImports(); @@ -141,6 +138,20 @@ public class ImportsResolver { } } + public static void checkPlatformTypesMappedToKotlin( + @NotNull ModuleDescriptor module, + @NotNull BindingTrace trace, + @NotNull JetImportDirective importDirective, + @NotNull Collection descriptors + ) { + JetExpression importedReference = importDirective.getImportedReference(); + if (importedReference != null) { + for (DeclarationDescriptor descriptor : descriptors) { + reportPlatformClassMappedToKotlin(module, trace, importedReference, descriptor); + } + } + } + public static void reportPlatformClassMappedToKotlin( @NotNull ModuleDescriptor module, @NotNull BindingTrace trace, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index 4acd0da1359..086a1b5e26c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil; +import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -174,8 +175,14 @@ public class TopDownAnalyzer { DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace); registerDeclarations(file.getDeclarations()); } + resolveAndCheckImports(file, resolveSession); } + private void resolveAndCheckImports(@NotNull JetFile file, @NotNull ResolveSession resolveSession) { + LazyImportScope fileScope = resolveSession.getScopeProvider().getExplicitImportsScopeForFile(file); + fileScope.forceResolveAllContents(); + } + private void visitClassOrObject(@NotNull JetClassOrObject classOrObject) { c.getClasses().put( 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 254d93e563e..142446b4b50 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 @@ -94,14 +94,23 @@ public class LazyImportScope implements JetScope, LazyEntity { directiveUnderResolve = directive; try { - resolveSession.getQualifiedExpressionResolver().processImportReference( - directive, - rootScope, - packageDescriptor.getMemberScope(), - importer, - traceForImportResolve, - resolveSession.getModuleDescriptor(), - mode); + Collection descriptors = + resolveSession.getQualifiedExpressionResolver().processImportReference( + directive, + rootScope, + packageDescriptor.getMemberScope(), + importer, + traceForImportResolve, + resolveSession.getModuleDescriptor(), + mode); + if (mode == LookupMode.EVERYTHING) { + ImportsResolver.checkPlatformTypesMappedToKotlin( + packageDescriptor.getModule(), + traceForImportResolve, + directive, + descriptors + ); + } } finally { directiveUnderResolve = null; @@ -323,4 +332,4 @@ public class LazyImportScope implements JetScope, LazyEntity { p.popIndent(); p.println("}"); } -} \ No newline at end of file +}