diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/instructions/DupInstruction.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/instructions/DupInstruction.java index 459b5d1a27f7..bc88af5a8224 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/instructions/DupInstruction.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/instructions/DupInstruction.java @@ -49,7 +49,7 @@ public class DupInstruction extends Instruction { for (int i = 0; i < myValueCount; i++) { values.add(memState.pop()); } - for (int j = 0; j < myDuplicationCount; j++) { + for (int j = 0; j < myDuplicationCount + 1; j++) { for (int i = values.size() - 1; i >= 0; i--) { memState.push(values.get(i)); } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ContractSeveralClauses.java b/java/java-tests/testData/inspection/dataFlow/fixture/ContractSeveralClauses.java new file mode 100644 index 000000000000..554e979d56cd --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/ContractSeveralClauses.java @@ -0,0 +1,13 @@ +import org.jetbrains.annotations.Contract; + +public class Foo { + + String foo(Object escaper, String s) { + return escapeStr(s, escaper); + } + + @Contract("null,_->null;!null,_->!null") + String escapeStr(String s, Object o) { + return s; + } +} \ 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 cce1a80092a1..f8707d97f9e3 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java @@ -276,6 +276,7 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { public void testContractInLoopNotTooComplex() { doTest(); } public void testContractWithNullable() { doTest(); } public void testContractPreservesUnknownNullability() { doTest(); } + public void testContractSeveralClauses() { doTest(); } public void testBoxingImpliesNotNull() { doTest(); } public void testLargeIntegersAreNotEqualWhenBoxed() { doTest(); }