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.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
@@ -133,7 +134,7 @@ public class ImportsResolver {
if (lookupMode == LookupMode.EVERYTHING) { if (lookupMode == LookupMode.EVERYTHING) {
for (JetImportDirective importDirective : importDirectives) { 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 JetImportDirective importDirective,
@NotNull WritableScope fileScope, @NotNull JetScope fileScope,
@NotNull Map<JetImportDirective, Collection<? extends DeclarationDescriptor>> resolvedDirectives, @Nullable Collection<? extends DeclarationDescriptor> resolvedDirectives,
@NotNull BindingTrace trace @NotNull BindingTrace trace
) { ) {
JetExpression importedReference = importDirective.getImportedReference(); JetExpression importedReference = importDirective.getImportedReference();
if (importedReference == null || !resolvedDirectives.containsKey(importDirective)) { if (importedReference == null || resolvedDirectives == null) {
return; return;
} }
Name aliasName = JetPsiUtil.getAliasName(importDirective); Name aliasName = JetPsiUtil.getAliasName(importDirective);
@@ -184,7 +185,7 @@ public class ImportsResolver {
} }
boolean uselessHiddenImport = true; boolean uselessHiddenImport = true;
for (DeclarationDescriptor wasResolved : resolvedDirectives.get(importDirective)) { for (DeclarationDescriptor wasResolved : resolvedDirectives) {
DeclarationDescriptor isResolved = null; DeclarationDescriptor isResolved = null;
if (wasResolved instanceof ClassDescriptor) { if (wasResolved instanceof ClassDescriptor) {
isResolved = fileScope.getClassifier(aliasName); isResolved = fileScope.getClassifier(aliasName);
@@ -54,10 +54,12 @@ public class LazyImportScope implements JetScope, LazyEntity {
private static class ImportResolveStatus { private static class ImportResolveStatus {
private final LookupMode lookupMode; private final LookupMode lookupMode;
private final JetScope scope; 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.lookupMode = lookupMode;
this.scope = scope; this.scope = scope;
this.descriptors = descriptors;
} }
} }
@@ -93,16 +95,16 @@ public class LazyImportScope implements JetScope, LazyEntity {
Importer.StandardImporter importer = new Importer.StandardImporter(directiveImportScope); Importer.StandardImporter importer = new Importer.StandardImporter(directiveImportScope);
directiveUnderResolve = directive; directiveUnderResolve = directive;
Collection<? extends DeclarationDescriptor> descriptors;
try { try {
Collection<? extends DeclarationDescriptor> descriptors = descriptors = resolveSession.getQualifiedExpressionResolver().processImportReference(
resolveSession.getQualifiedExpressionResolver().processImportReference( directive,
directive, rootScope,
rootScope, packageDescriptor.getMemberScope(),
packageDescriptor.getMemberScope(), importer,
importer, traceForImportResolve,
traceForImportResolve, resolveSession.getModuleDescriptor(),
resolveSession.getModuleDescriptor(), mode);
mode);
if (mode == LookupMode.EVERYTHING) { if (mode == LookupMode.EVERYTHING) {
ImportsResolver.checkPlatformTypesMappedToKotlin( ImportsResolver.checkPlatformTypesMappedToKotlin(
packageDescriptor.getModule(), packageDescriptor.getModule(),
@@ -117,7 +119,7 @@ public class LazyImportScope implements JetScope, LazyEntity {
directiveImportScope.changeLockLevel(WritableScope.LockLevel.READING); directiveImportScope.changeLockLevel(WritableScope.LockLevel.READING);
} }
importResolveStatus = new ImportResolveStatus(mode, directiveImportScope); importResolveStatus = new ImportResolveStatus(mode, directiveImportScope, descriptors);
return directiveImportScope; return directiveImportScope;
} }
}); });
@@ -172,6 +174,11 @@ public class LazyImportScope implements JetScope, LazyEntity {
public void forceResolveAllContents() { public void forceResolveAllContents() {
for (JetImportDirective importDirective : importsProvider.getAllImports()) { for (JetImportDirective importDirective : importsProvider.getAllImports()) {
getImportScope(importDirective, LookupMode.EVERYTHING); getImportScope(importDirective, LookupMode.EVERYTHING);
ImportResolveStatus status = importedScopesProvider.invoke(importDirective).importResolveStatus;
if (status != null && !status.descriptors.isEmpty()) {
ImportsResolver.reportUselessImport(importDirective, this, status.descriptors, traceForImportResolve);
}
} }
} }