[java] makes "module exports to itself" inspection delete degenerate statements

This commit is contained in:
Roman Shevchenko
2017-02-17 15:57:24 +01:00
parent 79ed40d10c
commit d3a7f869a2
3 changed files with 21 additions and 10 deletions
@@ -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<PsiJavaModuleReferenceElement> 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));
}
}
}
}
@@ -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 <warning descr=\"$message\">M</warning>; }")
fix("module M { exports pkg.main to <caret>M; }",
"module M { exports pkg.main; }")
"module M {\n}")
}
fun testOnlySelfOpen() {
highlight("module M { opens pkg.main to <warning descr=\"$message\">M</warning>; }")
fix("module M { opens pkg.main to <caret>M; }",
"module M { opens pkg.main; }")
"module M {\n}")
}
fun testOnlySelfModuleWithComments() {
fix("module M { exports pkg.main to /*a*/ <caret>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
@@ -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