From f98d01be5efa13c27c0888f2a75833c450be2e30 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 6 Oct 2015 15:29:27 +0200 Subject: [PATCH] dfa: don't suggest to simplify boolean expressions with side effects (IDEA-145401) --- .../codeInspection/dataFlow/DataFlowInspectionBase.java | 2 ++ .../dataFlow/fixture/DontSimplifyAssignment.java | 9 +++++++++ .../intellij/codeInspection/DataFlowInspectionTest.java | 5 +++++ 3 files changed, 16 insertions(+) create mode 100644 java/java-tests/testData/inspection/dataFlow/fixture/DontSimplifyAssignment.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java index 6b12851cb9a2..d2d6500de158 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowInspectionBase.java @@ -737,6 +737,8 @@ public class DataFlowInspectionBase extends BaseJavaBatchLocalInspectionTool { private static SimplifyBooleanExpressionFix createIntention(PsiElement element, boolean value) { if (!(element instanceof PsiExpression)) return null; + if (PsiTreeUtil.findChildOfType(element, PsiAssignmentExpression.class) != null) return null; + final PsiExpression expression = (PsiExpression)element; while (element.getParent() instanceof PsiExpression) { element = element.getParent(); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/DontSimplifyAssignment.java b/java/java-tests/testData/inspection/dataFlow/fixture/DontSimplifyAssignment.java new file mode 100644 index 000000000000..d5e48e487192 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/DontSimplifyAssignment.java @@ -0,0 +1,9 @@ +class Contracts { + + boolean x; + + public boolean testSideEffect() { + return x && !(x = false); + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java index 1ec4ca567e99..195e4395322d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java @@ -371,6 +371,11 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { myFixture.checkResultByFile(getTestName(false) + "_after.java"); } + public void testDontSimplifyAssignment() { + doTest(); + assertEmpty(myFixture.filterAvailableIntentions("Simplify")); + } + public void testAssertThat() { myFixture.addClass("package org.hamcrest; public class CoreMatchers { " + "public static Matcher notNullValue() {}\n" +