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);
}
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<? extends DeclarationDescriptor> 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,
@@ -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,
@@ -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<? extends DeclarationDescriptor> 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("}");
}
}
}