From 8d2f9b07e845748bc0f13fe07023a95dd19b64fd Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 6 Mar 2015 14:05:31 +0100 Subject: [PATCH] contract nulls are compatible with array return types (IDEA-137323) --- .../dataFlow/InferenceFromSourceUtil.java | 2 +- .../dataFlow/contractCheck/ReturnPrimitiveArray.java | 10 ++++++++++ .../com/intellij/codeInspection/ContractCheckTest.java | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/inspection/dataFlow/contractCheck/ReturnPrimitiveArray.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/InferenceFromSourceUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/InferenceFromSourceUtil.java index bbe5573e4d8c..fd03efe01839 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/InferenceFromSourceUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/InferenceFromSourceUtil.java @@ -65,7 +65,7 @@ public class InferenceFromSourceUtil { returnValue == MethodContract.ValueConstraint.FALSE_VALUE; } - if (returnType instanceof PsiClassType) { + if (!(returnType instanceof PsiPrimitiveType)) { return returnValue == MethodContract.ValueConstraint.NULL_VALUE || returnValue == MethodContract.ValueConstraint.NOT_NULL_VALUE; } diff --git a/java/java-tests/testData/inspection/dataFlow/contractCheck/ReturnPrimitiveArray.java b/java/java-tests/testData/inspection/dataFlow/contractCheck/ReturnPrimitiveArray.java new file mode 100644 index 000000000000..b549b12c2907 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/contractCheck/ReturnPrimitiveArray.java @@ -0,0 +1,10 @@ +import org.jetbrains.annotations.Contract; + +class Zoo { + @Contract( "null->null" ) + static byte[] bar( String s ) + { + if ( s == null ) + return null; + return new byte[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 eb1cc994138d..7ea453f2cfb0 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java @@ -42,4 +42,5 @@ public class ContractCheckTest extends LightCodeInsightFixtureTestCase { public void testSignatureIssues() { doTest(); } public void testVarargInferred() { doTest(); } public void testDoubleParameter() { doTest(); } + public void testReturnPrimitiveArray() { doTest(); } }