Java8CollectionsApiInspection: add checkboxes to switch off individual sub-inspections

This commit is contained in:
Tagir Valeev
2016-09-28 13:39:00 +07:00
parent c3e57bf911
commit 347ee7481d
@@ -20,7 +20,7 @@ import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil;
import com.intellij.codeInspection.*;
import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
@@ -52,12 +52,23 @@ public class Java8CollectionsApiInspection extends BaseJavaBatchLocalInspectionT
private static final Logger LOG = Logger.getInstance(Java8CollectionsApiInspection.class);
public boolean myReportContainsCondition;
public boolean mySuggestCollectionRemoveIf = true;
public boolean mySuggestListSort = true;
public boolean mySuggestMapGetOrDefault = true;
public boolean mySuggestMapPutIfAbsent = true;
public boolean mySuggestMapComputeIfAbsent = true;
@Nullable
@Override
public JComponent createOptionsPanel() {
return new SingleCheckboxOptionsPanel("Report when \'containsKey\' is used in condition (may change semantics)", this,
"myReportContainsCondition");
MultipleCheckboxOptionsPanel panel = new MultipleCheckboxOptionsPanel(this);
panel.addCheckbox("Suggest conversion to Collection.removeIf", "mySuggestCollectionRemoveIf");
panel.addCheckbox("Suggest conversion to List.sort", "mySuggestListSort");
panel.addCheckbox("Suggest conversion to Map.computeIfAbsent", "mySuggestMapComputeIfAbsent");
panel.addCheckbox("Suggest conversion to Map.getOrDefault", "mySuggestMapGetOrDefault");
panel.addCheckbox("Suggest conversion to Map.putIfAbsent", "mySuggestMapPutIfAbsent");
panel.addCheckbox("Report when \'containsKey\' is used in condition (may change semantics)", "myReportContainsCondition");
return panel;
}
@NotNull
@@ -70,6 +81,7 @@ public class Java8CollectionsApiInspection extends BaseJavaBatchLocalInspectionT
@Override
public void visitMethodCallExpression(PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
if (!mySuggestListSort) return;
PsiElement nameElement = expression.getMethodExpression().getReferenceNameElement();
if(nameElement != null && expression.getArgumentList().getExpressions().length == 2 &&
"sort".equals(nameElement.getText())) {
@@ -86,7 +98,7 @@ public class Java8CollectionsApiInspection extends BaseJavaBatchLocalInspectionT
}
void handleIteratorLoop(PsiLoopStatement statement, PsiJavaToken endToken, IteratorDeclaration declaration) {
if(endToken == null) return;
if (!mySuggestCollectionRemoveIf || endToken == null) return;
PsiStatement body = statement.getBody();
if(!(body instanceof PsiBlockStatement)) return;
PsiStatement[] statements = ((PsiBlockStatement)body).getCodeBlock().getStatements();
@@ -191,6 +203,7 @@ public class Java8CollectionsApiInspection extends BaseJavaBatchLocalInspectionT
value = ...
}
*/
if (!mySuggestMapGetOrDefault) return;
if (ExpressionUtils.isSimpleExpression(assignment.getRExpression()) &&
equivalence.expressionsAreEquivalent(assignment.getLExpression(), value)) {
holder.registerProblem(condition, QuickFixBundle.message("java.8.collections.api.inspection.description"),
@@ -204,6 +217,7 @@ public class Java8CollectionsApiInspection extends BaseJavaBatchLocalInspectionT
map.put(key, value);
}
*/
if (!mySuggestMapComputeIfAbsent) return;
PsiExpression key = getArguments[0];
PsiStatement[] statements = ((PsiBlockStatement)thenBranch).getCodeBlock().getStatements();
if(statements.length != 2) return;
@@ -356,7 +370,7 @@ public class Java8CollectionsApiInspection extends BaseJavaBatchLocalInspectionT
return new ConditionInfo(containsQualifier, containsKey, inverted);
}
private static void analyzeCorrespondenceOfPutAndGet(@NotNull PsiElement adjustedElseBranch,
private void analyzeCorrespondenceOfPutAndGet(@NotNull PsiElement adjustedElseBranch,
@Nullable PsiElement adjustedThenBranch,
@Nullable PsiExpression containsQualifier,
@Nullable PsiExpression containsKey,
@@ -364,6 +378,7 @@ public class Java8CollectionsApiInspection extends BaseJavaBatchLocalInspectionT
@NotNull PsiElement context) {
final PsiElement maybePutMethodCall;
final PsiElement maybeGetMethodCall;
if (!mySuggestMapPutIfAbsent) return;
if (adjustedThenBranch == null) {
maybeGetMethodCall = null;
if (adjustedElseBranch instanceof PsiExpressionStatement) {