diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java index 29bcecd0a53f..522bd34a9cf7 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/StandardInstructionVisitor.java @@ -254,7 +254,9 @@ public class StandardInstructionVisitor extends InstructionVisitor { DfaValue condition = factory.getRelationFactory().createRelation(argValue, expectedValue, EQEQ, invertCondition); if (condition == null) { if (!(argValue instanceof DfaConstValue)) { - falseStates.addAll(states); + for (DfaMemoryState state : states) { + falseStates.add(state.createCopy()); + } continue; } condition = constFactory.createFromValue((argValue == expectedValue) != invertCondition, PsiType.BOOLEAN, null); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/AssertTrueNotComplex.java b/java/java-tests/testData/inspection/dataFlow/fixture/AssertTrueNotComplex.java new file mode 100644 index 000000000000..9eb541c05de6 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/AssertTrueNotComplex.java @@ -0,0 +1,17 @@ +import org.jetbrains.annotations.Contract; + +import java.util.List; + +abstract class Some { + @Contract("_,false->fail") + abstract void assertTrue(String s, boolean b); + + void assertContainsAllVariants(List actualVariants, String... expectedVariants) { + for (String expectedVariant : expectedVariants) { + assertTrue(expectedVariant, actualVariants.contains(expectedVariant)); + } + } + +} + + diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java index 67987b3ab8eb..d15527e3c49c 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java @@ -235,6 +235,7 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { public void testManySequentialInstanceofsNotComplex() { doTest(); } public void testLongDisjunctionsNotComplex() { doTest(); } public void testWhileNotComplex() { doTest(); } + public void testAssertTrueNotComplex() { doTest(); } public void testManyDisjunctiveFieldAssignmentsInLoopNotComplex() { doTest(); } public void testManyContinuesNotComplex() { doTest(); } public void testFinallyNotComplex() { doTest(); }