diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedImportInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedImportInspection.kt index 42fc93a2791..0e207027bd3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedImportInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedImportInspection.kt @@ -16,21 +16,19 @@ package org.jetbrains.kotlin.idea.inspections -import com.intellij.codeInspection.LocalInspectionToolSession -import com.intellij.codeInspection.ProblemHighlightType -import com.intellij.codeInspection.ProblemsHolder +import com.intellij.codeInsight.actions.OptimizeImportsProcessor +import com.intellij.codeInspection.* +import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key import com.intellij.psi.PsiElementVisitor -import org.jetbrains.kotlin.idea.JetBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer import org.jetbrains.kotlin.idea.imports.importableFqNameSafe import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.JetFile +import org.jetbrains.kotlin.psi.JetImportDirective import org.jetbrains.kotlin.psi.JetSimpleNameExpression import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.getReferenceTargets import java.util.HashSet @@ -78,8 +76,20 @@ class UnusedImportInspection : AbstractKotlinInspection() { problemsHolder.registerProblem( directive, "Unused import directive", - ProblemHighlightType.LIKE_UNUSED_SYMBOL) + ProblemHighlightType.LIKE_UNUSED_SYMBOL, + OptimizeImportsQuickFix(file)) } } } + + private class OptimizeImportsQuickFix(private val file: JetFile): LocalQuickFix { + override fun getName() = "Optimize imports" + + override fun getFamilyName() = getName() + + override fun applyFix(project: Project, descriptor: ProblemDescriptor) { + OptimizeImportsProcessor(project, file).run() + } + } + } \ No newline at end of file diff --git a/idea/testData/quickfix/optimizeImports/.inspection b/idea/testData/quickfix/optimizeImports/.inspection new file mode 100644 index 00000000000..caf88c402b4 --- /dev/null +++ b/idea/testData/quickfix/optimizeImports/.inspection @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.inspections.UnusedImportInspection \ No newline at end of file diff --git a/idea/testData/quickfix/optimizeImports/fileRuntime.kt b/idea/testData/quickfix/optimizeImports/fileRuntime.kt new file mode 100644 index 00000000000..23b9dccc7d4 --- /dev/null +++ b/idea/testData/quickfix/optimizeImports/fileRuntime.kt @@ -0,0 +1,8 @@ +// "Optimize imports" "true" + +import java.io.* +import java.util.* + +fun foo(list: ArrayList) { + list.add("") +} diff --git a/idea/testData/quickfix/optimizeImports/fileRuntime.kt.after b/idea/testData/quickfix/optimizeImports/fileRuntime.kt.after new file mode 100644 index 00000000000..68bc9683da7 --- /dev/null +++ b/idea/testData/quickfix/optimizeImports/fileRuntime.kt.after @@ -0,0 +1,7 @@ +// "Optimize imports" "true" + +import java.util.ArrayList + +fun foo(list: ArrayList) { + list.add("") +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 30de46d17d2..42873214be9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4471,6 +4471,21 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { } } + @TestMetadata("idea/testData/quickfix/optimizeImports") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class OptimizeImports extends AbstractQuickFixTest { + public void testAllFilesPresentInOptimizeImports() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/optimizeImports"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true); + } + + @TestMetadata("fileRuntime.kt") + public void testFileRuntime() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/optimizeImports/fileRuntime.kt"); + doTest(fileName); + } + } + @TestMetadata("idea/testData/quickfix/override") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)