From d3a7f869a282e3cbd403b68c24a2634a30247b80 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 17 Feb 2017 15:57:24 +0100 Subject: [PATCH] [java] makes "module exports to itself" inspection delete degenerate statements --- ...a9ModuleExportsPackageToItselfInspection.java | 16 +++++++++++++--- .../Java9ModuleExportsPackageToItselfTest.kt | 12 ++++++------ .../src/messages/InspectionsBundle.properties | 3 ++- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleExportsPackageToItselfInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleExportsPackageToItselfInspection.java index c50451f9c22d..a86ed56c8a30 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleExportsPackageToItselfInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleExportsPackageToItselfInspection.java @@ -22,8 +22,11 @@ import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import java.util.List; + /** * @author Pavel.Dolgov */ @@ -47,11 +50,18 @@ public class Java9ModuleExportsPackageToItselfInspection extends BaseJavaLocalIn PsiJavaModule javaModule = PsiTreeUtil.getParentOfType(statement, PsiJavaModule.class); if (javaModule != null) { String moduleName = javaModule.getName(); - for (PsiJavaModuleReferenceElement referenceElement : statement.getModuleReferences()) { + List references = ContainerUtil.newArrayList(statement.getModuleReferences()); + for (PsiJavaModuleReferenceElement referenceElement : references) { if (moduleName.equals(referenceElement.getReferenceText())) { String message = InspectionsBundle.message("inspection.module.exports.package.to.itself"); - String fixText = InspectionsBundle.message("exports.to.itself.delete.module.fix.name", moduleName); - myHolder.registerProblem(referenceElement, message, QuickFixFactory.getInstance().createDeleteFix(referenceElement, fixText)); + if (references.size() == 1) { + String fixText = InspectionsBundle.message("exports.to.itself.delete.statement.fix"); + myHolder.registerProblem(referenceElement, message, QuickFixFactory.getInstance().createDeleteFix(statement, fixText)); + } + else { + String fixText = InspectionsBundle.message("exports.to.itself.delete.module.ref.fix", moduleName); + myHolder.registerProblem(referenceElement, message, QuickFixFactory.getInstance().createDeleteFix(referenceElement, fixText)); + } } } } diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/Java9ModuleExportsPackageToItselfTest.kt b/java/java-tests/testSrc/com/intellij/codeInspection/Java9ModuleExportsPackageToItselfTest.kt index 1e43759592f3..ec038a43c3bd 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/Java9ModuleExportsPackageToItselfTest.kt +++ b/java/java-tests/testSrc/com/intellij/codeInspection/Java9ModuleExportsPackageToItselfTest.kt @@ -25,7 +25,8 @@ import org.intellij.lang.annotations.Language */ class Java9ModuleExportsPackageToItselfTest : LightJava9ModulesCodeInsightFixtureTestCase() { private val message = InspectionsBundle.message("inspection.module.exports.package.to.itself")!! - private val fix = InspectionsBundle.message("exports.to.itself.delete.module.fix.name", "M")!! + private val fix1 = InspectionsBundle.message("exports.to.itself.delete.statement.fix")!! + private val fix2 = InspectionsBundle.message("exports.to.itself.delete.module.ref.fix", "M")!! override fun setUp() { super.setUp() @@ -43,18 +44,18 @@ class Java9ModuleExportsPackageToItselfTest : LightJava9ModulesCodeInsightFixtur fun testOnlySelfExport() { highlight("module M { exports pkg.main to M; }") fix("module M { exports pkg.main to M; }", - "module M { exports pkg.main; }") + "module M {\n}") } fun testOnlySelfOpen() { highlight("module M { opens pkg.main to M; }") fix("module M { opens pkg.main to M; }", - "module M { opens pkg.main; }") + "module M {\n}") } fun testOnlySelfModuleWithComments() { fix("module M { exports pkg.main to /*a*/ M /*b*/; }", - "module M { exports pkg.main /*a*/ /*b*/; }") + "module M { /*a*/ /*b*/\n}") } fun testSelfModuleInList() { @@ -76,8 +77,7 @@ class Java9ModuleExportsPackageToItselfTest : LightJava9ModulesCodeInsightFixtur private fun fix(textBefore: String, @Language("JAVA") textAfter: String) { myFixture.configureByText("module-info.java", textBefore) - val action = myFixture.findSingleIntention(fix) - assertNotNull(action) + val action = myFixture.filterAvailableIntentions(fix1).firstOrNull() ?: myFixture.filterAvailableIntentions(fix2).first() myFixture.launchAction(action) myFixture.checkHighlighting() // no warning diff --git a/platform/platform-resources-en/src/messages/InspectionsBundle.properties b/platform/platform-resources-en/src/messages/InspectionsBundle.properties index 84946eb68e2b..b98b29213ee2 100644 --- a/platform/platform-resources-en/src/messages/InspectionsBundle.properties +++ b/platform/platform-resources-en/src/messages/InspectionsBundle.properties @@ -752,7 +752,8 @@ inspection.lambda.to.method.call.fix.family.name=Replace lambda expression with inspection.lambda.to.method.call.fix.name=Replace lambda expression with ''{0}'' inspection.module.exports.package.to.itself=Module exports/opens package to itself -exports.to.itself.delete.module.fix.name=Delete reference to module ''{0}'' +exports.to.itself.delete.statement.fix=Delete statement +exports.to.itself.delete.module.ref.fix=Delete reference to module ''{0}'' inspection.replace.with.bulk.message=Iteration can be replaced with bulk ''{0}'' call inspection.replace.with.bulk.fix.name=Replace iteration with bulk ''{0}'' call