From b4a9a53ec700a98f71e0c1bc8c54d904bed87453 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 24 Jun 2015 17:27:17 +0200 Subject: [PATCH] dfa: report constant xor conditions only for the last operator in polyadic (IDEA-141853) --- .../codeInspection/dataFlow/ControlFlowAnalyzer.java | 2 +- .../testData/inspection/dataFlow/fixture/Xor.java | 11 +++++++++++ .../codeInspection/DataFlowInspectionTest.java | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/inspection/dataFlow/fixture/Xor.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java index db190c4d8854..1e8b089b9625 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java @@ -1239,7 +1239,7 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { operand = operands[i]; operand.accept(this); generateBoxingUnboxingInstructionFor(operand, exprType); - PsiElement psiAnchor = expression.isPhysical() ? expression : null; + PsiElement psiAnchor = i == operands.length - 1 && expression.isPhysical() ? expression : null; addInstruction(new BinopInstruction(JavaTokenType.NE, psiAnchor, expression.getProject())); } } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/Xor.java b/java/java-tests/testData/inspection/dataFlow/fixture/Xor.java new file mode 100644 index 000000000000..31b8f906a7cd --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/Xor.java @@ -0,0 +1,11 @@ +import java.util.List; + +class Some { + + public static void main(String[] args) { + boolean x = true, y = true, z = true, t = true; + boolean r = x ^ y ^ z ^ t; + System.out.println("r: " + r); + } + +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java index 5805808d3a17..a9fb4ee828b3 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java @@ -267,6 +267,7 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { public void testNotEqualsTypo() { doTest(); } public void testAndEquals() { doTest(); } + public void testXor() { doTest(); } public void testUnusedCallDoesNotMakeUnknown() { doTest(); } public void testEmptyCallDoesNotMakeNullable() { doTest(); }