Report useless and hidden imports in LAZY mode
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user