diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8CollectionsApiInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8CollectionsApiInspection.java index 2bee199a292f..507366cd267c 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8CollectionsApiInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/java18api/Java8CollectionsApiInspection.java @@ -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) {