From 17fe0f503ac5795fe883ed61c86b7009f69992a4 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 27 Jun 2018 16:23:38 +0300 Subject: [PATCH] keep comments: don't restore comments which repeat in replacement IDEA-CR-33818 --- ...itionalCanBePushedInsideExpressionInspection.java | 12 +++++++----- .../src/com/siyeh/ig/psiutils/ParenthesesUtils.java | 4 +++- ...onditionalCanBePushedInsideExpressionFixTest.java | 3 ++- 3 files changed, 12 insertions(+), 7 deletions(-) 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 782d2f06f602..c43ca5d195b4 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ConditionalCanBePushedInsideExpressionInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/controlflow/ConditionalCanBePushedInsideExpressionInspection.java @@ -86,16 +86,18 @@ public class ConditionalCanBePushedInsideExpressionInspection extends BaseInspec if (!match.isPartialMatch()) { return; } - CommentTracker commentTracker = new CommentTracker(); final PsiElement leftDiff = match.getLeftDiff(); final PsiElement rightDiff = match.getRightDiff(); - final String expression = "(" + commentTracker.text(conditionalExpression.getCondition()) + " ? " + - commentTracker.text(leftDiff) + " : " + commentTracker.text(rightDiff) + ")"; + final String expression = "(" + conditionalExpression.getCondition().getText() + " ? " + + leftDiff.getText() + " : " + rightDiff.getText() + ")"; final PsiExpression newConditionalExpression = JavaPsiFacade.getElementFactory(project).createExpressionFromText(expression, conditionalExpression); - final PsiElement replacedConditionalExpression = commentTracker.replaceAndRestoreComments(leftDiff, newConditionalExpression); + final PsiElement replacedConditionalExpression = leftDiff.replace(newConditionalExpression); ParenthesesUtils.removeParentheses((PsiExpression)replacedConditionalExpression, false); - new CommentTracker().replaceAndRestoreComments(conditionalExpression, thenExpression); + 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/psiutils/ParenthesesUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ParenthesesUtils.java index 878e9a1edec2..a37bb22e4dae 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ParenthesesUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ParenthesesUtils.java @@ -185,7 +185,9 @@ public class ParenthesesUtils { if (!(parent instanceof PsiExpression) || !areParenthesesNeeded(body, (PsiExpression)parent, ignoreClarifyingParentheses)) { PsiExpression newExpression = ExpressionUtils.replacePolyadicWithParent(parenthesizedExpression, body); if (newExpression == null){ - newExpression = (PsiExpression)new CommentTracker().replaceAndRestoreComments(parenthesizedExpression, body); + CommentTracker commentTracker = new CommentTracker(); + commentTracker.markUnchanged(body); + newExpression = (PsiExpression)commentTracker.replaceAndRestoreComments(parenthesizedExpression, body); } removeParentheses(newExpression, ignoreClarifyingParentheses); } diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/ConditionalCanBePushedInsideExpressionFixTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/ConditionalCanBePushedInsideExpressionFixTest.java index 8d4554cecc60..6c39b173329f 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/ConditionalCanBePushedInsideExpressionFixTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/controlflow/ConditionalCanBePushedInsideExpressionFixTest.java @@ -13,13 +13,14 @@ public class ConditionalCanBePushedInsideExpressionFixTest extends IGQuickFixesT doTest(InspectionGadgetsBundle.message("conditional.can.be.pushed.inside.expression.quickfix"), "class X {\n" + " String foo(boolean b) {\n" + - " return b ? String.valueOf(new Double(0)) //c1\n" + + " return b/*c0*/ ? String.valueOf(new Double(0)) //c1\n" + " : String.valueOf(new Double(1.2))//c2\n" + " ;\n" + " }\n" + "}", "class X {\n" + " String foo(boolean b) {\n" + + " /*c0*/\n" + " //c1\n" + " return String.valueOf(new Double(b ? 0 : 1.2))//c2\n" + " ;\n" +