diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SimplifyBooleanExpressionFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SimplifyBooleanExpressionFix.java index e34e8587f3df..b002325c0936 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SimplifyBooleanExpressionFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SimplifyBooleanExpressionFix.java @@ -15,6 +15,7 @@ import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.controlFlow.AnalysisCanceledException; import com.intellij.psi.controlFlow.ControlFlowUtil; import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.PsiExpressionTrimRenderer; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.util.RefactoringUtil; @@ -77,7 +78,7 @@ public class SimplifyBooleanExpressionFix extends LocalQuickFixOnPsiElement { if (parent instanceof PsiDoWhileStatement) return "Unwrap 'do-while' statement"; if (parent instanceof PsiForStatement) return "Remove 'for' statement"; } - return QuickFixBundle.message("simplify.boolean.expression.text", expression.getText(), constantValue); + return QuickFixBundle.message("simplify.boolean.expression.text", PsiExpressionTrimRenderer.render(expression), constantValue); } @Override @@ -118,6 +119,7 @@ public class SimplifyBooleanExpressionFix extends LocalQuickFixOnPsiElement { if (!isAvailable()) return; PsiExpression subExpression = getSubExpression(); if (subExpression == null) return; + CommentTracker ct = new CommentTracker(); if (shouldExtractSideEffect()) { subExpression = RefactoringUtil.ensureCodeBlock(subExpression); if (subExpression == null) { @@ -130,6 +132,7 @@ public class SimplifyBooleanExpressionFix extends LocalQuickFixOnPsiElement { return; } List sideEffects = SideEffectChecker.extractSideEffectExpressions(subExpression); + sideEffects.forEach(ct::markUnchanged); PsiStatement[] statements = StatementExtractor.generateStatements(sideEffects, subExpression); if (statements.length > 0) { BlockUtils.addBefore(anchor, statements); @@ -139,9 +142,7 @@ public class SimplifyBooleanExpressionFix extends LocalQuickFixOnPsiElement { return; } } - final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); - final PsiExpression constExpression = factory.createExpressionFromText(Boolean.toString(mySubExpressionValue), subExpression); - PsiExpression expression = (PsiExpression)subExpression.replace(constExpression); + PsiExpression expression = (PsiExpression)ct.replaceAndRestoreComments(subExpression, Boolean.toString(mySubExpressionValue)); while (expression.getParent() instanceof PsiExpression) { expression = (PsiExpression)expression.getParent(); } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/SideEffectReturn.java b/java/java-tests/testData/inspection/dataFlow/fixture/SideEffectReturn.java index 817235475a20..6fcd1ee20548 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/SideEffectReturn.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/SideEffectReturn.java @@ -1,7 +1,7 @@ class SideEffectReturn { private boolean isValidValue(String value) { try { - return Test.valueOf(value) != null; + return Test.valueOf(value/*oops*/) != null; } catch (IllegalArgumentException e) { return false; } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/SideEffectReturn_after.java b/java/java-tests/testData/inspection/dataFlow/fixture/SideEffectReturn_after.java index 6fbbd63f8f44..45faef791a80 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/SideEffectReturn_after.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/SideEffectReturn_after.java @@ -1,7 +1,7 @@ class SideEffectReturn { private boolean isValidValue(String value) { try { - Test.valueOf(value); + Test.valueOf(value/*oops*/); return true; } catch (IllegalArgumentException e) { return false; diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java index ab31ce3f04ed..fbc7fb0c3d00 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java @@ -490,12 +490,12 @@ public class DataFlowInspectionTest extends DataFlowInspectionTestCase { public void testSideEffectReturn() { doTest(); - checkIntentionResult("Simplify 'Test.valueOf(value) != null' to true extracting side effects"); + checkIntentionResult("Simplify 'Test.valueOf(...) != null' to true extracting side effects"); } public void testSideEffectNoBrace() { doTest(); - checkIntentionResult("Simplify 'Test.valueOf(value) != null' to true extracting side effects"); + checkIntentionResult("Simplify 'Test.valueOf(...) != null' to true extracting side effects"); } public void testSimplifyConcatWithParentheses() { @@ -584,4 +584,5 @@ public class DataFlowInspectionTest extends DataFlowInspectionTestCase { public void testAdvancedArrayAccess() { doTest(); } public void testNullableGetterInLoop() { doTest(); } public void testNullabilityBasics() { doTest(); } + public void testReassignedVarInLoop() { doTest(); } }