From 03ddd9dcea311b59cf51e27c67a9835c8ba4a83d Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 16 Feb 2015 12:12:04 +0100 Subject: [PATCH] IDEA-136580 "Contract violation" warnings are reported for manual method contract --- .../codeInspection/dataFlow/DfaMemoryStateImpl.java | 2 +- .../dataFlow/contractCheck/DoubleParameter.java | 11 +++++++++++ .../intellij/codeInspection/ContractCheckTest.java | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/inspection/dataFlow/contractCheck/DoubleParameter.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java index e914c50278f9..56bf0f301195 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java @@ -625,7 +625,7 @@ public class DfaMemoryStateImpl implements DfaMemoryState { applyEquivalenceRelation(dfaRelation, dfaLeft, dfaRight); return isNegated; } - if (canBeNaN(dfaLeft) || canBeNaN(dfaRight)) { + if (canBeNaN(dfaLeft) && canBeNaN(dfaRight)) { applyEquivalenceRelation(dfaRelation, dfaLeft, dfaRight); return true; } diff --git a/java/java-tests/testData/inspection/dataFlow/contractCheck/DoubleParameter.java b/java/java-tests/testData/inspection/dataFlow/contractCheck/DoubleParameter.java new file mode 100644 index 000000000000..d88bbccc5a87 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/contractCheck/DoubleParameter.java @@ -0,0 +1,11 @@ +import org.jetbrains.annotations.Contract; + +class Zoo { + @Contract("null, _ -> null; !null, _ -> !null") + public static Double testContract_1(Double value1, int value2) { + if (value1 == null) { + return null; + } + return 0.0; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java index 50355f3c9ced..eb1cc994138d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java @@ -41,4 +41,5 @@ public class ContractCheckTest extends LightCodeInsightFixtureTestCase { public void testSignatureIssues() { doTest(); } public void testVarargInferred() { doTest(); } + public void testDoubleParameter() { doTest(); } }