diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 5ce20193a9a..26d5384e3d6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -102,7 +102,6 @@ public interface Errors { DiagnosticFactory1 CANNOT_IMPORT_FROM_ELEMENT = DiagnosticFactory1.create(ERROR); DiagnosticFactory1 CANNOT_BE_IMPORTED = DiagnosticFactory1.create(ERROR); - DiagnosticFactory0 USELESS_HIDDEN_IMPORT = DiagnosticFactory0.create(WARNING); DiagnosticFactory1 CONFLICTING_IMPORT = DiagnosticFactory1.create(ERROR); DiagnosticFactory0 USELESS_SIMPLE_IMPORT = DiagnosticFactory0.create(WARNING); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 7cd68141ca5..aa370044206 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -168,7 +168,6 @@ public class DefaultErrorMessages { MAP.put(CANNOT_IMPORT_FROM_ELEMENT, "Cannot import from ''{0}''", NAME); MAP.put(CANNOT_BE_IMPORTED, "Cannot import ''{0}'', functions and properties can be imported only from packages", NAME); - MAP.put(USELESS_HIDDEN_IMPORT, "Useless import, it is hidden further"); MAP.put(CONFLICTING_IMPORT, "Conflicting import, imported name ''{0}'' is ambiguous", STRING); MAP.put(USELESS_SIMPLE_IMPORT, "Useless import, does nothing"); MAP.put(PLATFORM_CLASS_MAPPED_TO_KOTLIN, "This class shouldn''t be used in Kotlin. Use {0} instead.", CLASSES_OR_SEPARATED); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ImportsResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ImportsResolver.java index 5dc798e5382..8019372e023 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ImportsResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ImportsResolver.java @@ -133,7 +133,7 @@ public class ImportsResolver { if (lookupMode == LookupMode.EVERYTHING) { for (JetImportDirective importDirective : importDirectives) { - reportUselessImport(importDirective, fileScope, resolvedDirectives.get(importDirective), trace); + reportConflictingOrUselessImport(importDirective, fileScope, resolvedDirectives.get(importDirective), trace); } } } @@ -167,11 +167,11 @@ public class ImportsResolver { } } - public static void reportUselessImport( - @NotNull JetImportDirective importDirective, - @NotNull JetScope fileScope, - @Nullable Collection resolvedTo, - @NotNull BindingTrace trace + public static void reportConflictingOrUselessImport( + @NotNull JetImportDirective importDirective, + @NotNull JetScope fileScope, + @Nullable Collection resolvedTo, + @NotNull BindingTrace trace ) { JetExpression importedReference = importDirective.getImportedReference(); @@ -180,39 +180,18 @@ public class ImportsResolver { Name aliasName = JetPsiUtil.getAliasName(importDirective); if (aliasName == null) return; - boolean uselessHiddenImport = true; - for (DeclarationDescriptor target : resolvedTo) { - DeclarationDescriptor isResolved = null; + if (resolvedTo.size() == 1) { + DeclarationDescriptor target = resolvedTo.iterator().next(); if (target instanceof ClassDescriptor) { - isResolved = fileScope.getClassifier(aliasName); - } - else if (target instanceof VariableDescriptor) { - isResolved = fileScope.getLocalVariable(aliasName); + if (fileScope.getClassifier(aliasName) == null) { + trace.report(CONFLICTING_IMPORT.on(importedReference, aliasName.asString())); + return; + } } else if (target instanceof PackageViewDescriptor) { - isResolved = fileScope.getPackage(aliasName); - } - if (isResolved == null || isResolved.equals(target)) { - uselessHiddenImport = false; - } - } - if (uselessHiddenImport) { - trace.report(USELESS_HIDDEN_IMPORT.on(importedReference)); - } - else { - if (resolvedTo.size() == 1) { - DeclarationDescriptor target = resolvedTo.iterator().next(); - if (target instanceof ClassDescriptor) { - if (fileScope.getClassifier(aliasName) == null) { - trace.report(CONFLICTING_IMPORT.on(importedReference, aliasName.asString())); - return; - } - } - else if (target instanceof PackageViewDescriptor) { - if (fileScope.getPackage(aliasName) == null) { - trace.report(CONFLICTING_IMPORT.on(importedReference, aliasName.asString())); - return; - } + if (fileScope.getPackage(aliasName) == null) { + trace.report(CONFLICTING_IMPORT.on(importedReference, aliasName.asString())); + return; } } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt index 74d0c365f75..07af33250bd 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt @@ -135,7 +135,7 @@ class LazyImportScope( val status = importedScopesProvider(importDirective).importResolveStatus if (status != null && !status.descriptors.isEmpty()) { val fileScope = resolveSession.getScopeProvider().getFileScope(importDirective.getContainingJetFile()) - ImportsResolver.reportUselessImport(importDirective, fileScope, status.descriptors, traceForImportResolve) + ImportsResolver.reportConflictingOrUselessImport(importDirective, fileScope, status.descriptors, traceForImportResolve) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.java index 6a09e8faf09..af355e3a3e4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.java @@ -128,7 +128,6 @@ public class QuickFixRegistrar { JetSingleIntentionActionFactory removeImportFixFactory = RemovePsiElementSimpleFix.createRemoveImportFactory(); QuickFixes.factories.put(USELESS_SIMPLE_IMPORT, removeImportFixFactory); - QuickFixes.factories.put(USELESS_HIDDEN_IMPORT, removeImportFixFactory); QuickFixes.factories.put(CONFLICTING_IMPORT, removeImportFixFactory); QuickFixes.factories.put(SUPERTYPE_NOT_INITIALIZED, ChangeToConstructorInvocationFix.createFactory()); diff --git a/idea/testData/quickfix/uselessImports/afterRemoveUselessHiddenImport.kt b/idea/testData/quickfix/uselessImports/afterRemoveUselessHiddenImport.kt deleted file mode 100644 index 9dae8fcc279..00000000000 --- a/idea/testData/quickfix/uselessImports/afterRemoveUselessHiddenImport.kt +++ /dev/null @@ -1,4 +0,0 @@ -// "Remove useless import for 'kotlin.List'" "true" -import kotlin.Double - -class List {} diff --git a/idea/testData/quickfix/uselessImports/beforeRemoveUselessHiddenImport.kt b/idea/testData/quickfix/uselessImports/beforeRemoveUselessHiddenImport.kt deleted file mode 100644 index d1c6b2098d2..00000000000 --- a/idea/testData/quickfix/uselessImports/beforeRemoveUselessHiddenImport.kt +++ /dev/null @@ -1,5 +0,0 @@ -// "Remove useless import for 'kotlin.List'" "true" -import kotlin.Double -import kotlin.List - -class List {} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index ef74610d1e8..12b0ba9730c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4649,12 +4649,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/uselessImports"), Pattern.compile("^before(\\w+)\\.kt$"), true); } - @TestMetadata("beforeRemoveUselessHiddenImport.kt") - public void testRemoveUselessHiddenImport() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/uselessImports/beforeRemoveUselessHiddenImport.kt"); - doTest(fileName); - } - @TestMetadata("beforeRemoveUselessImport.kt") public void testRemoveUselessImport() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/uselessImports/beforeRemoveUselessImport.kt");