Report useless and hidden imports in LAZY mode

This commit is contained in:
Andrey Breslav
2014-03-07 23:54:31 +04:00
parent 66b4c8d1a9
commit 6b72d44929
2 changed files with 25 additions and 17 deletions
@@ -19,6 +19,7 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
@@ -133,7 +134,7 @@ public class ImportsResolver {
if (lookupMode == LookupMode.EVERYTHING) {
for (JetImportDirective importDirective : importDirectives) {
reportUselessImport(importDirective, fileScope, resolvedDirectives, trace);
reportUselessImport(importDirective, fileScope, resolvedDirectives.get(importDirective), trace);
}
}
}
@@ -167,15 +168,15 @@ public class ImportsResolver {
}
}
private static void reportUselessImport(
public static void reportUselessImport(
@NotNull JetImportDirective importDirective,
@NotNull WritableScope fileScope,
@NotNull Map<JetImportDirective, Collection<? extends DeclarationDescriptor>> resolvedDirectives,
@NotNull JetScope fileScope,
@Nullable Collection<? extends DeclarationDescriptor> resolvedDirectives,
@NotNull BindingTrace trace
) {
JetExpression importedReference = importDirective.getImportedReference();
if (importedReference == null || !resolvedDirectives.containsKey(importDirective)) {
if (importedReference == null || resolvedDirectives == null) {
return;
}
Name aliasName = JetPsiUtil.getAliasName(importDirective);
@@ -184,7 +185,7 @@ public class ImportsResolver {
}
boolean uselessHiddenImport = true;
for (DeclarationDescriptor wasResolved : resolvedDirectives.get(importDirective)) {
for (DeclarationDescriptor wasResolved : resolvedDirectives) {
DeclarationDescriptor isResolved = null;
if (wasResolved instanceof ClassDescriptor) {
isResolved = fileScope.getClassifier(aliasName);
@@ -54,10 +54,12 @@ public class LazyImportScope implements JetScope, LazyEntity {
private static class ImportResolveStatus {
private final LookupMode lookupMode;
private final JetScope scope;
private final Collection<? extends DeclarationDescriptor> descriptors;
ImportResolveStatus(LookupMode lookupMode, JetScope scope) {
ImportResolveStatus(LookupMode lookupMode, JetScope scope, Collection<? extends DeclarationDescriptor> descriptors) {
this.lookupMode = lookupMode;
this.scope = scope;
this.descriptors = descriptors;
}
}
@@ -93,16 +95,16 @@ public class LazyImportScope implements JetScope, LazyEntity {
Importer.StandardImporter importer = new Importer.StandardImporter(directiveImportScope);
directiveUnderResolve = directive;
Collection<? extends DeclarationDescriptor> descriptors;
try {
Collection<? extends DeclarationDescriptor> descriptors =
resolveSession.getQualifiedExpressionResolver().processImportReference(
directive,
rootScope,
packageDescriptor.getMemberScope(),
importer,
traceForImportResolve,
resolveSession.getModuleDescriptor(),
mode);
descriptors = resolveSession.getQualifiedExpressionResolver().processImportReference(
directive,
rootScope,
packageDescriptor.getMemberScope(),
importer,
traceForImportResolve,
resolveSession.getModuleDescriptor(),
mode);
if (mode == LookupMode.EVERYTHING) {
ImportsResolver.checkPlatformTypesMappedToKotlin(
packageDescriptor.getModule(),
@@ -117,7 +119,7 @@ public class LazyImportScope implements JetScope, LazyEntity {
directiveImportScope.changeLockLevel(WritableScope.LockLevel.READING);
}
importResolveStatus = new ImportResolveStatus(mode, directiveImportScope);
importResolveStatus = new ImportResolveStatus(mode, directiveImportScope, descriptors);
return directiveImportScope;
}
});
@@ -172,6 +174,11 @@ public class LazyImportScope implements JetScope, LazyEntity {
public void forceResolveAllContents() {
for (JetImportDirective importDirective : importsProvider.getAllImports()) {
getImportScope(importDirective, LookupMode.EVERYTHING);
ImportResolveStatus status = importedScopesProvider.invoke(importDirective).importResolveStatus;
if (status != null && !status.descriptors.isEmpty()) {
ImportsResolver.reportUselessImport(importDirective, this, status.descriptors, traceForImportResolve);
}
}
}