Fixed useless hidden import & useless simple import diagnostics when Java class is resolved as both class and namespace.

This commit is contained in:
Evgeny Gerashchenko
2013-03-07 19:23:16 +04:00
parent 619e2d4210
commit fd2d5975e4
2 changed files with 22 additions and 16 deletions
@@ -123,14 +123,14 @@ public class ImportsResolver {
temporaryTrace, configuration, lookupMode);
}
Map<JetImportDirective, DeclarationDescriptor> resolvedDirectives = Maps.newHashMap();
Map<JetImportDirective, Collection<? extends DeclarationDescriptor>> resolvedDirectives = Maps.newHashMap();
for (JetImportDirective importDirective : importDirectives) {
Collection<? extends DeclarationDescriptor> descriptors =
qualifiedExpressionResolver.processImportReference(importDirective, rootScope, namespaceScope, delayedImporter,
trace, configuration, lookupMode);
if (descriptors.size() == 1) {
resolvedDirectives.put(importDirective, descriptors.iterator().next());
if (!descriptors.isEmpty()) {
resolvedDirectives.put(importDirective, descriptors);
}
JetExpression importedReference = importDirective.getImportedReference();
@@ -167,7 +167,7 @@ public class ImportsResolver {
private static void reportUselessImport(
@NotNull JetImportDirective importDirective,
@NotNull WritableScope namespaceScope,
@NotNull Map<JetImportDirective, DeclarationDescriptor> resolvedDirectives,
@NotNull Map<JetImportDirective, Collection<? extends DeclarationDescriptor>> resolvedDirectives,
@NotNull BindingTrace trace
) {
@@ -180,20 +180,26 @@ public class ImportsResolver {
return;
}
DeclarationDescriptor wasResolved = resolvedDirectives.get(importDirective);
DeclarationDescriptor isResolved = null;
if (wasResolved instanceof ClassDescriptor) {
isResolved = namespaceScope.getClassifier(aliasName);
boolean uselessHiddenImport = true;
for (DeclarationDescriptor wasResolved : resolvedDirectives.get(importDirective)) {
DeclarationDescriptor isResolved = null;
if (wasResolved instanceof ClassDescriptor) {
isResolved = namespaceScope.getClassifier(aliasName);
}
else if (wasResolved instanceof VariableDescriptor) {
isResolved = namespaceScope.getLocalVariable(aliasName);
}
else if (wasResolved instanceof NamespaceDescriptor) {
isResolved = namespaceScope.getNamespace(aliasName);
}
if (isResolved == null || isResolved == wasResolved) {
uselessHiddenImport = false;
}
}
else if (wasResolved instanceof VariableDescriptor) {
isResolved = namespaceScope.getLocalVariable(aliasName);
}
else if (wasResolved instanceof NamespaceDescriptor) {
isResolved = namespaceScope.getNamespace(aliasName);
}
if (isResolved != null && isResolved != wasResolved) {
if (uselessHiddenImport) {
trace.report(USELESS_HIDDEN_IMPORT.on(importedReference));
}
if (!importDirective.isAllUnder() &&
importedReference instanceof JetSimpleNameExpression &&
importDirective.getAliasName() == null) {
@@ -6,5 +6,5 @@ public class Ccc extends Bbb {
}
//FILE: Ddd.kt
import Ccc
import <!USELESS_SIMPLE_IMPORT!>Ccc<!>