From 261d0170305dac25815d049874d00a85a71d866d Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Tue, 26 Jul 2016 11:17:18 +0300 Subject: [PATCH] quick fix batch application: getWorkingQuickFix uses QuickFix#getFamilyName to find suitable fixes (IDEA-155841) --- .../StreamApiMigrationInspection.java | 27 ++++++------------- .../ex/LocalQuickFixWrapper.java | 16 ++--------- 2 files changed, 10 insertions(+), 33 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java index 18f947b96716..815d035a6feb 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/StreamApiMigrationInspection.java @@ -22,7 +22,6 @@ import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil; import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; @@ -129,10 +128,10 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo } else if (REPLACE_TRIVIAL_FOREACH || !isTrivial(body, statement.getIterationParameter())) { final List fixes = new ArrayList(); - fixes.add(new ReplaceWithForeachFix()); + fixes.add(new ReplaceWithForeachCallFix("forEach")); if (extractIfStatement(body) != null) { //for .stream() - fixes.add(new ReplaceWithForeachOrderedFix()); + fixes.add(new ReplaceWithForeachCallFix("forEachOrdered")); } holder.registerProblem(iteratedValue, "Can be replaced with foreach call", ProblemHighlightType.GENERIC_ERROR_OR_WARNING, @@ -285,22 +284,12 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo return mapperCall instanceof PsiReferenceExpression && ((PsiReferenceExpression)mapperCall).resolve() == parameter; } - private static class ReplaceWithForeachFix extends ReplaceWithForeachCallFix { - @Override - protected String getForEachMethodName() { - return "forEach"; - } - } + private static class ReplaceWithForeachCallFix implements LocalQuickFix { + private final String myForEachMethodName; - private static class ReplaceWithForeachOrderedFix extends ReplaceWithForeachCallFix { - @Override - protected String getForEachMethodName() { - return "forEachOrdered"; + protected ReplaceWithForeachCallFix(String forEachMethodName) { + myForEachMethodName = forEachMethodName; } - } - - private static abstract class ReplaceWithForeachCallFix implements LocalQuickFix { - protected abstract String getForEachMethodName(); @NotNull @Override @@ -311,7 +300,7 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo @NotNull @Override public String getFamilyName() { - return "Replace with " + getForEachMethodName(); + return "Replace with " + myForEachMethodName; } @Override @@ -336,7 +325,7 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo body = thenBranch; } - buffer.append(".").append(getForEachMethodName()).append("("); + buffer.append(".").append(myForEachMethodName).append("("); final String functionalExpressionText = createForEachFunctionalExpressionText(project, body, parameter); final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(project); diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/LocalQuickFixWrapper.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/LocalQuickFixWrapper.java index 5982609cff91..810c6d6a7626 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/LocalQuickFixWrapper.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/LocalQuickFixWrapper.java @@ -61,26 +61,14 @@ public class LocalQuickFixWrapper extends QuickFixAction { @Nullable private QuickFix getWorkingQuickFix(@NotNull QuickFix[] fixes) { - final QuickFix exactResult = getWorkingQuickFix(fixes, true); - return exactResult != null ? exactResult : getWorkingQuickFix(fixes, false); - } - - @Nullable - private QuickFix getWorkingQuickFix(@NotNull QuickFix[] fixes, boolean exact) { for (QuickFix fix : fixes) { - if (!checkFix(exact, myFix, fix)) continue; - if (myFix instanceof IntentionWrapper && fix instanceof IntentionWrapper) { - if (!checkFix(exact, ((IntentionWrapper)myFix).getAction(), ((IntentionWrapper)fix).getAction())) continue; + if (fix.getFamilyName().equals(myFix.getFamilyName())) { + return fix; } - return fix; } return null; } - private static boolean checkFix(boolean exact, T thisFix, T fix) { - return exact ? thisFix.getClass() == fix.getClass() : thisFix.getClass().isInstance(fix); - } - @Override protected boolean applyFix(@NotNull RefEntity[] refElements) { return true;