From a88ab17b3f26c8e7f98f0e8c5db3609dd22f85ec Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 6 Feb 2015 14:49:37 +0100 Subject: [PATCH] IDEA-136079 "Contract violation" warnings are reported for inferred method contract for method with varargs --- .../codeInspection/dataFlow/value/DfaVariableValue.java | 6 +++++- .../inspection/dataFlow/contractCheck/VarargInferred.java | 6 ++++++ .../com/intellij/codeInspection/ContractCheckTest.java | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/inspection/dataFlow/contractCheck/VarargInferred.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java index 65b5e61b28a7..fd45fdfc8b5a 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaVariableValue.java @@ -57,7 +57,11 @@ public class DfaVariableValue extends DfaValue { } public DfaVariableValue createVariableValue(PsiVariable myVariable, boolean isNegated) { - return createVariableValue(myVariable, myVariable.getType(), isNegated, null); + PsiType varType = myVariable.getType(); + if (varType instanceof PsiEllipsisType) { + varType = new PsiArrayType(((PsiEllipsisType)varType).getComponentType()); + } + return createVariableValue(myVariable, varType, isNegated, null); } @NotNull public DfaVariableValue createVariableValue(@NotNull PsiModifierListOwner myVariable, diff --git a/java/java-tests/testData/inspection/dataFlow/contractCheck/VarargInferred.java b/java/java-tests/testData/inspection/dataFlow/contractCheck/VarargInferred.java new file mode 100644 index 000000000000..7f38129033be --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/contractCheck/VarargInferred.java @@ -0,0 +1,6 @@ +class X { + public static String compute(String... s) { + if (s == null) return null; + return ""; + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java index c2cddc127835..50355f3c9ced 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/ContractCheckTest.java @@ -40,4 +40,5 @@ public class ContractCheckTest extends LightCodeInsightFixtureTestCase { public void testNestedCallsMayThrow() { doTest(); } public void testSignatureIssues() { doTest(); } + public void testVarargInferred() { doTest(); } }