Import directives are resolved in lazy mode
This commit is contained in:
@@ -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("}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user