From 6de1320d0411ff7f5f216e8fdf53448bfe01a4fc Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 29 Jun 2018 12:00:29 +0700 Subject: [PATCH] CommentTracker#replace(AndRestoreComments): mark replacement element as unchanged by default --- .../codeInspection/ClassGetClassInspection.java | 3 +-- .../intention/impl/InlineStreamMapAction.java | 4 ++-- .../codeInspection/ObviousNullCheckInspection.java | 2 +- .../RedundantStreamOptionalCallInspection.java | 3 +-- .../SimplifyStreamApiCallChainsInspection.java | 2 +- .../java18api/Java8MapApiInspection.java | 2 +- .../streamMigration/JoiningMigration.java | 3 +-- ...itionalCanBePushedInsideExpressionInspection.java | 1 - .../ForLoopReplaceableByWhileInspection.java | 2 +- .../ig/performance/ManualArrayCopyInspection.java | 4 +--- .../src/com/siyeh/ig/psiutils/CommentTracker.java | 7 ++++--- .../ig/style/SimplifiableIfStatementInspection.java | 2 +- .../TrivialFunctionalExpressionUsageInspection.java | 4 ++-- .../ig/performance/ListRemoveInLoopInspection.java | 2 +- .../RedundantCollectionOperationInspection.java | 12 +++++------- .../RedundantStringOperationInspection.java | 4 ++-- 16 files changed, 25 insertions(+), 32 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/ClassGetClassInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/ClassGetClassInspection.java index 564833abf208..bc5121f06e18 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/ClassGetClassInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/ClassGetClassInspection.java @@ -51,8 +51,7 @@ public class ClassGetClassInspection extends AbstractBaseJavaLocalInspectionTool if (call == null) return; PsiExpression qualifier = call.getMethodExpression().getQualifierExpression(); if (qualifier == null) return; - CommentTracker ct = new CommentTracker(); - ct.replaceAndRestoreComments(call, ct.markUnchanged(qualifier)); + new CommentTracker().replaceAndRestoreComments(call, qualifier); } } diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/InlineStreamMapAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/InlineStreamMapAction.java index a442c6b5104b..872b565015d7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/InlineStreamMapAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/InlineStreamMapAction.java @@ -243,13 +243,13 @@ public class InlineStreamMapAction extends PsiElementBaseIntentionAction { } ct.replace(e, replacement); } - ct.replace(nextParameters[0], ct.markUnchanged(prevParameters[0])); + ct.replace(nextParameters[0], prevParameters[0]); ExpressionUtils.bindReferenceTo(nextRef, newName); PsiExpression prevQualifier = mapCall.getMethodExpression().getQualifierExpression(); if(prevQualifier == null) { ct.deleteAndRestoreComments(nextQualifier); } else { - ct.replaceAndRestoreComments(nextQualifier, ct.markUnchanged(prevQualifier)); + ct.replaceAndRestoreComments(nextQualifier, prevQualifier); } CodeStyleManager.getInstance(project).reformat(lambda); } diff --git a/java/java-impl/src/com/intellij/codeInspection/ObviousNullCheckInspection.java b/java/java-impl/src/com/intellij/codeInspection/ObviousNullCheckInspection.java index 8f578901310d..9db1645d768d 100644 --- a/java/java-impl/src/com/intellij/codeInspection/ObviousNullCheckInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/ObviousNullCheckInspection.java @@ -131,7 +131,7 @@ public class ObviousNullCheckInspection extends AbstractBaseJavaLocalInspectionT } ct.deleteAndRestoreComments(parent); } else { - ct.replaceAndRestoreComments(call, ct.markUnchanged(startElement)); + ct.replaceAndRestoreComments(call, startElement); } } } diff --git a/java/java-impl/src/com/intellij/codeInspection/RedundantStreamOptionalCallInspection.java b/java/java-impl/src/com/intellij/codeInspection/RedundantStreamOptionalCallInspection.java index dacc78e2b27d..d1249a79a2e2 100644 --- a/java/java-impl/src/com/intellij/codeInspection/RedundantStreamOptionalCallInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/RedundantStreamOptionalCallInspection.java @@ -353,8 +353,7 @@ public class RedundantStreamOptionalCallInspection extends AbstractBaseJavaLocal if (call == null) return; PsiExpression qualifier = call.getMethodExpression().getQualifierExpression(); if (qualifier == null) return; - CommentTracker ct = new CommentTracker(); - ct.replaceAndRestoreComments(call, ct.markUnchanged(qualifier)); + new CommentTracker().replaceAndRestoreComments(call, qualifier); } } diff --git a/java/java-impl/src/com/intellij/codeInspection/SimplifyStreamApiCallChainsInspection.java b/java/java-impl/src/com/intellij/codeInspection/SimplifyStreamApiCallChainsInspection.java index 592b14234a75..c7b30d4eb15c 100644 --- a/java/java-impl/src/com/intellij/codeInspection/SimplifyStreamApiCallChainsInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/SimplifyStreamApiCallChainsInspection.java @@ -1266,7 +1266,7 @@ public class SimplifyStreamApiCallChainsInspection extends AbstractBaseJavaLocal ct.replace(arg, replacement); } ExpressionUtils.bindCallTo(qualifier, name); - return ct.replaceAndRestoreComments(call, ct.markUnchanged(qualifier)); + return ct.replaceAndRestoreComments(call, qualifier); } static CallHandler handler() { diff --git a/java/java-impl/src/com/intellij/codeInspection/java18api/Java8MapApiInspection.java b/java/java-impl/src/com/intellij/codeInspection/java18api/Java8MapApiInspection.java index 42835fff8b2a..48d59d62514c 100644 --- a/java/java-impl/src/com/intellij/codeInspection/java18api/Java8MapApiInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/java18api/Java8MapApiInspection.java @@ -307,7 +307,7 @@ public class Java8MapApiInspection extends AbstractBaseJavaLocalInspectionTool { LambdaCanBeMethodReferenceInspection.replaceLambdaWithMethodReference((PsiLambdaExpression)newArg); } if(PsiTreeUtil.isAncestor(conditional, result, true)) { - result = ct.replaceAndRestoreComments(conditional, ct.markUnchanged(result)); + result = ct.replaceAndRestoreComments(conditional, result); } else { ct.deleteAndRestoreComments(conditional); } diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/JoiningMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/JoiningMigration.java index 323aa6d2d253..92b76d0980d6 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/JoiningMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/JoiningMigration.java @@ -28,7 +28,6 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtil; -import java.util.HashSet; import com.siyeh.ig.callMatcher.CallMatcher; import com.siyeh.ig.psiutils.*; import one.util.streamex.StreamEx; @@ -249,7 +248,7 @@ public class JoiningMigration extends BaseStreamApiMigration { PsiMethodCallExpression nextCall = ExpressionUtils.getCallForQualifier(call); PsiExpression qualifier = call.getMethodExpression().getQualifierExpression(); if (nextCall != null && qualifier != null) { - ct.replace(nextCall, ct.markUnchanged(qualifier)); + ct.replace(nextCall, qualifier); } } } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ConditionalCanBePushedInsideExpressionInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ConditionalCanBePushedInsideExpressionInspection.java index c43ca5d195b4..453ed07646b1 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ConditionalCanBePushedInsideExpressionInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ConditionalCanBePushedInsideExpressionInspection.java @@ -96,7 +96,6 @@ public class ConditionalCanBePushedInsideExpressionInspection extends BaseInspec ParenthesesUtils.removeParentheses((PsiExpression)replacedConditionalExpression, false); CommentTracker commentTracker = new CommentTracker(); commentTracker.markUnchanged(conditionalExpression.getCondition()); - commentTracker.markUnchanged(thenExpression); commentTracker.replaceAndRestoreComments(conditionalExpression, thenExpression); } } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ForLoopReplaceableByWhileInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ForLoopReplaceableByWhileInspection.java index c83512615dd1..e0fe2e7801b7 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ForLoopReplaceableByWhileInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ForLoopReplaceableByWhileInspection.java @@ -104,7 +104,7 @@ public class ForLoopReplaceableByWhileInspection extends BaseInspection { final PsiExpression whileCondition = whileStatement.getCondition(); if (forCondition != null) { assert whileCondition != null; - commentTracker.replace(whileCondition, commentTracker.markUnchanged(forCondition)); + commentTracker.replace(whileCondition, forCondition); } final PsiBlockStatement blockStatement = (PsiBlockStatement)whileStatement.getBody(); if (blockStatement == null) { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/ManualArrayCopyInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/ManualArrayCopyInspection.java index d4a04cfa5fec..8462e246aebc 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/ManualArrayCopyInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/ManualArrayCopyInspection.java @@ -24,7 +24,6 @@ import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.InspectionGadgetsFix; -import com.siyeh.ig.PsiReplacementUtil; import com.siyeh.ig.psiutils.*; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -89,8 +88,7 @@ public class ManualArrayCopyInspection extends BaseInspection { if (Boolean.TRUE.equals(DfaUtil.evaluateCondition(ifStatement.getCondition()))) { PsiStatement copyStatement = ControlFlowUtils.stripBraces(ifStatement.getThenBranch()); assert copyStatement != null; - CommentTracker ct = new CommentTracker(); - ct.replaceAndRestoreComments(ifStatement, ct.markUnchanged(copyStatement)); + new CommentTracker().replaceAndRestoreComments(ifStatement, copyStatement); } } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CommentTracker.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CommentTracker.java index b545676ba4d3..8e31998b7fb7 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CommentTracker.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CommentTracker.java @@ -20,7 +20,7 @@ import java.util.function.Predicate; * * @author Tagir Valeev */ -public class CommentTracker { +public final class CommentTracker { private final Set ignoredParents = new HashSet<>(); private List comments = new ArrayList<>(); @@ -167,10 +167,11 @@ public class CommentTracker { * Replaces given PsiElement collecting all the comments inside it. * * @param element element to replace - * @param replacement replacement element + * @param replacement replacement element. It's also marked as unchanged (see {@link #markUnchanged(PsiElement)}) * @return the element which was actually inserted in the tree (either {@code replacement} or its copy) */ public @NotNull PsiElement replace(@NotNull PsiElement element, @NotNull PsiElement replacement) { + markUnchanged(replacement); grabComments(element); return element.replace(replacement); } @@ -201,7 +202,7 @@ public class CommentTracker { *

After calling this method the tracker cannot be used anymore.

* * @param element element to replace - * @param replacement replacement element + * @param replacement replacement element. It's also marked as unchanged (see {@link #markUnchanged(PsiElement)}) * @return the element which was actually inserted in the tree (either {@code replacement} or its copy) */ public @NotNull PsiElement replaceAndRestoreComments(@NotNull PsiElement element, @NotNull PsiElement replacement) { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/SimplifiableIfStatementInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/SimplifiableIfStatementInspection.java index f226594f22a5..f0dbd84ccb16 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/SimplifiableIfStatementInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/SimplifiableIfStatementInspection.java @@ -94,7 +94,7 @@ public class SimplifiableIfStatementInspection extends AbstractBaseJavaLocalInsp if (!PsiTreeUtil.isAncestor(ifStatement, model.myElseBranch, true)) { commentTracker.delete(model.myElseBranch); } - PsiElement result = commentTracker.replaceAndRestoreComments(ifStatement, commentTracker.markUnchanged(model.myThenBranch)); + PsiElement result = commentTracker.replaceAndRestoreComments(ifStatement, model.myThenBranch); tryJoinDeclaration(result); } diff --git a/plugins/InspectionGadgets/src/com/intellij/codeInspection/TrivialFunctionalExpressionUsageInspection.java b/plugins/InspectionGadgets/src/com/intellij/codeInspection/TrivialFunctionalExpressionUsageInspection.java index 772d81157817..fc95821e88d3 100644 --- a/plugins/InspectionGadgets/src/com/intellij/codeInspection/TrivialFunctionalExpressionUsageInspection.java +++ b/plugins/InspectionGadgets/src/com/intellij/codeInspection/TrivialFunctionalExpressionUsageInspection.java @@ -203,7 +203,7 @@ public class TrivialFunctionalExpressionUsageInspection extends AbstractBaseJava inlineCallArguments(callExpression, element, ct); // body could be invalidated after inlining expression = LambdaUtil.extractSingleExpressionFromBody(element.getBody()); - ct.replaceAndRestoreComments(callExpression, ct.markUnchanged(expression)); + ct.replaceAndRestoreComments(callExpression, expression); } private static void replaceCodeBlock(PsiLambdaExpression element) { @@ -233,7 +233,7 @@ public class TrivialFunctionalExpressionUsageInspection extends AbstractBaseJava } final PsiExpression returnValue = statement == null ? null : statement.getReturnValue(); if (returnValue != null) { - ct.replaceAndRestoreComments(callExpression, ct.markUnchanged(returnValue)); + ct.replaceAndRestoreComments(callExpression, returnValue); } else { ct.deleteAndRestoreComments(callExpression); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ListRemoveInLoopInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ListRemoveInLoopInspection.java index 03fef28eb834..1f540dca432f 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ListRemoveInLoopInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ListRemoveInLoopInspection.java @@ -154,7 +154,7 @@ public class ListRemoveInLoopInspection extends AbstractBaseJavaLocalInspectionT if (Boolean.TRUE.equals(DfaUtil.evaluateCondition(condition))) { PsiStatement nakedSubListClear = ControlFlowUtils.stripBraces(ifStatement.getThenBranch()); assert nakedSubListClear != null; - ct.replaceAndRestoreComments(ifStatement, ct.markUnchanged(nakedSubListClear)); + ct.replaceAndRestoreComments(ifStatement, nakedSubListClear); } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/RedundantCollectionOperationInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/RedundantCollectionOperationInspection.java index 6aebf4b0be74..fe54633a4fd1 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/RedundantCollectionOperationInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/RedundantCollectionOperationInspection.java @@ -175,7 +175,7 @@ public class RedundantCollectionOperationInspection extends AbstractBaseJavaLoca PsiPolyadicExpression conjunction = (PsiPolyadicExpression)parent; PsiExpression[] conjuncts = conjunction.getOperands(); if (conjuncts.length == 2) { - ct.replaceAndRestoreComments(parent, ct.markUnchanged(conjuncts[0])); + ct.replaceAndRestoreComments(parent, conjuncts[0]); } else { PsiExpression lastConjunct = conjuncts[conjuncts.length-1]; PsiJavaToken token = conjunction.getTokenBeforeOperand(lastConjunct); @@ -189,7 +189,7 @@ public class RedundantCollectionOperationInspection extends AbstractBaseJavaLoca PsiIfStatement ifStatement = (PsiIfStatement)parent; PsiExpressionStatement thenBody = tryCast(ControlFlowUtils.stripBraces(ifStatement.getThenBranch()), PsiExpressionStatement.class); if (thenBody == null) return; - ct.replaceAndRestoreComments(ifStatement, ct.markUnchanged(thenBody)); + ct.replaceAndRestoreComments(ifStatement, thenBody); } } @@ -352,8 +352,7 @@ public class RedundantCollectionOperationInspection extends AbstractBaseJavaLoca PsiExpression singletonArg = ArrayUtil.getFirstElement(singleton.getArgumentList().getExpressions()); if (singletonArg == null) return; ExpressionUtils.bindCallTo(call, "contains"); - CommentTracker ct = new CommentTracker(); - ct.replaceAndRestoreComments(arg, ct.markUnchanged(singletonArg)); + new CommentTracker().replaceAndRestoreComments(arg, singletonArg); } public static RedundantCollectionOperationHandler handler(PsiMethodCallExpression call) { @@ -426,7 +425,7 @@ public class RedundantCollectionOperationInspection extends AbstractBaseJavaLoca typeElement.replace(JavaPsiFacade.getElementFactory(project).createTypeElement(elementType.createArrayType())); } } - ct.replaceAndRestoreComments(call, ct.markUnchanged(args[0])); + ct.replaceAndRestoreComments(call, args[0]); } static RedundantAsListForIterationHandler handler(PsiMethodCallExpression call) { @@ -480,9 +479,8 @@ public class RedundantCollectionOperationInspection extends AbstractBaseJavaLoca if (myCollectionsSort) { PsiMethodCallExpression outerCall = PsiTreeUtil.getParentOfType(call, PsiMethodCallExpression.class); if (outerCall == null) return; + new CommentTracker().replaceAndRestoreComments(call, array); CommentTracker ct = new CommentTracker(); - ct.replaceAndRestoreComments(call, ct.markUnchanged(array)); - ct = new CommentTracker(); ct.replaceAndRestoreComments(outerCall, sortMethod + ct.text(outerCall.getArgumentList())); } else { diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/RedundantStringOperationInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/RedundantStringOperationInspection.java index 9dec2e113517..3ddcd94d0101 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/RedundantStringOperationInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/RedundantStringOperationInspection.java @@ -239,7 +239,7 @@ public class RedundantStringOperationInspection extends AbstractBaseJavaLocalIns CommentTracker ct = new CommentTracker(); switch (myFixType) { case REPLACE_WITH_QUALIFIER: { - PsiExpression result = (PsiExpression)ct.replaceAndRestoreComments(call, ct.markUnchanged(qualifier)); + PsiExpression result = (PsiExpression)ct.replaceAndRestoreComments(call, qualifier); if (result.getParent() instanceof PsiExpressionStatement) { extractSideEffects(result, (PsiExpressionStatement)result.getParent()); } @@ -251,7 +251,7 @@ public class RedundantStringOperationInspection extends AbstractBaseJavaLocalIns for (PsiExpression arg : call.getArgumentList().getExpressions()) { list.add(ct.markUnchanged(arg)); } - ct.replaceAndRestoreComments(call, ct.markUnchanged(qualifier)); + ct.replaceAndRestoreComments(call, qualifier); break; } }