diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ContractChecker.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ContractChecker.java index 5131bc29c7a3..6f5d6f7fe818 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ContractChecker.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ContractChecker.java @@ -15,6 +15,7 @@ */ package com.intellij.codeInspection.dataFlow; +import com.intellij.codeInsight.NullableNotNullManager; import com.intellij.codeInspection.dataFlow.instructions.CheckReturnValueInstruction; import com.intellij.codeInspection.dataFlow.instructions.Instruction; import com.intellij.codeInspection.dataFlow.instructions.MethodCallInstruction; @@ -115,7 +116,7 @@ class ContractChecker extends DataFlowRunner { private static boolean weCannotInferAnythingAboutMethodReturnValue(MethodCallInstruction instruction) { PsiMethod target = instruction.getTargetMethod(); - return instruction.getContracts().isEmpty() && target != null && !target.isConstructor(); + return instruction.getContracts().isEmpty() && target != null && !target.isConstructor() && !NullableNotNullManager.isNotNull(target); } @NotNull diff --git a/java/java-tests/testData/inspection/dataFlow/contractCheck/CallingNotNullMethod.java b/java/java-tests/testData/inspection/dataFlow/contractCheck/CallingNotNullMethod.java new file mode 100644 index 000000000000..221d681a811c --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/contractCheck/CallingNotNullMethod.java @@ -0,0 +1,21 @@ +import org.jetbrains.annotations.*; + +class Test { + + @Contract("!null -> null") + static String test(String s) { + if(s != null) { + return getValue(s); + } + return getDefaultValue(); + } + + @NotNull + static String getValue(String s) { + return s.trim(); + } + + static String getDefaultValue() { + return "foo"; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/ContractCheckTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/ContractCheckTest.java index ae6d7f9d0028..e66febed0068 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/ContractCheckTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/ContractCheckTest.java @@ -63,4 +63,5 @@ public class ContractCheckTest extends LightCodeInsightFixtureTestCase { public void testPassingVarargsToDelegate() { doTest(); } public void testUnknownIfCondition() { doTest(); } + public void testCallingNotNullMethod() { doTest(); } }