Import directives are resolved in lazy mode

This commit is contained in:
Andrey Breslav
2014-02-26 21:39:30 +04:00
parent 8bf252f98c
commit 81f2f79c79
3 changed files with 41 additions and 14 deletions
@@ -125,11 +125,8 @@ public class ImportsResolver {
resolvedDirectives.put(importDirective, descriptors); resolvedDirectives.put(importDirective, descriptors);
} }
JetExpression importedReference = importDirective.getImportedReference(); if (lookupMode != LookupMode.ONLY_CLASSES) {
if (lookupMode != LookupMode.ONLY_CLASSES && importedReference != null) { checkPlatformTypesMappedToKotlin(module, trace, importDirective, descriptors);
for (DeclarationDescriptor descriptor : descriptors) {
reportPlatformClassMappedToKotlin(module, trace, importedReference, descriptor);
}
} }
} }
delayedImporter.processImports(); delayedImporter.processImports();
@@ -141,6 +138,20 @@ public class ImportsResolver {
} }
} }
public static void checkPlatformTypesMappedToKotlin(
@NotNull ModuleDescriptor module,
@NotNull BindingTrace trace,
@NotNull JetImportDirective importDirective,
@NotNull Collection<? extends DeclarationDescriptor> descriptors
) {
JetExpression importedReference = importDirective.getImportedReference();
if (importedReference != null) {
for (DeclarationDescriptor descriptor : descriptors) {
reportPlatformClassMappedToKotlin(module, trace, importedReference, descriptor);
}
}
}
public static void reportPlatformClassMappedToKotlin( public static void reportPlatformClassMappedToKotlin(
@NotNull ModuleDescriptor module, @NotNull ModuleDescriptor module,
@NotNull BindingTrace trace, @NotNull BindingTrace trace,
@@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.impl.*; import org.jetbrains.jet.lang.descriptors.impl.*;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil; 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.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -174,8 +175,14 @@ public class TopDownAnalyzer {
DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace); DescriptorResolver.resolvePackageHeader(packageDirective, moduleDescriptor, trace);
registerDeclarations(file.getDeclarations()); 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) { private void visitClassOrObject(@NotNull JetClassOrObject classOrObject) {
c.getClasses().put( c.getClasses().put(
classOrObject, classOrObject,
@@ -94,14 +94,23 @@ public class LazyImportScope implements JetScope, LazyEntity {
directiveUnderResolve = directive; directiveUnderResolve = directive;
try { try {
resolveSession.getQualifiedExpressionResolver().processImportReference( Collection<? extends DeclarationDescriptor> descriptors =
directive, resolveSession.getQualifiedExpressionResolver().processImportReference(
rootScope, directive,
packageDescriptor.getMemberScope(), rootScope,
importer, packageDescriptor.getMemberScope(),
traceForImportResolve, importer,
resolveSession.getModuleDescriptor(), traceForImportResolve,
mode); resolveSession.getModuleDescriptor(),
mode);
if (mode == LookupMode.EVERYTHING) {
ImportsResolver.checkPlatformTypesMappedToKotlin(
packageDescriptor.getModule(),
traceForImportResolve,
directive,
descriptors
);
}
} }
finally { finally {
directiveUnderResolve = null; directiveUnderResolve = null;
@@ -323,4 +332,4 @@ public class LazyImportScope implements JetScope, LazyEntity {
p.popIndent(); p.popIndent();
p.println("}"); p.println("}");
} }
} }