IDEA-223549 "Constant conditions & exceptions" should handle Objects.requireNonNullElse

GitOrigin-RevId: c73699d42137d7eafdfba49ed415065f312faabf
This commit is contained in:
Tagir Valeev
2019-09-26 04:03:39 +00:00
committed by intellij-monorepo-bot
parent 9c01012c08
commit 272518b1bd
3 changed files with 35 additions and 1 deletions
@@ -154,7 +154,17 @@ public class HardcodedContracts {
StandardMethodContract.fromText("null,!null->false"),
StandardMethodContract.fromText("!null,null->false")
))
.register(enumValues(), ContractProvider.of(StandardMethodContract.fromText("->new")));
.register(enumValues(), ContractProvider.of(StandardMethodContract.fromText("->new")))
// Convert the following to external annotation once we support Java 9+ external annotations (IDEA-198249)
.register(staticCall(JAVA_UTIL_OBJECTS, "requireNonNullElse").parameterCount(2),
ContractProvider.of(
StandardMethodContract.fromText("!null,_->param1"),
StandardMethodContract.fromText("null,!null->param2"),
StandardMethodContract.fromText("null,null->fail")))
.register(staticCall(JAVA_UTIL_OBJECTS, "requireNonNullElseGet").parameterCount(2),
ContractProvider.of(
StandardMethodContract.fromText("!null,_->param1"),
StandardMethodContract.fromText("null,_->!null")));
public static List<MethodContract> getHardcodedContracts(@NotNull PsiMethod method, @Nullable PsiMethodCallExpression call) {
PsiClass owner = method.getContainingClass();
@@ -0,0 +1,23 @@
import java.util.*;
import org.jetbrains.annotations.*;
public class ObjectsRequireNonNullElse {
public int requireNonNullElse(@Nullable String str) {
str = Objects.requireNonNullElse(str, "");
if (<warning descr="Condition 'str == null' is always 'false'">str == null</warning>) {}
return str.length();
}
void test2(String s) {
String s1 = Objects.requireNonNullElse(s, "");
if (!s1.equals(s)) {
if (<warning descr="Condition '!s1.isEmpty()' is always 'false'">!<warning descr="Result of 's1.isEmpty()' is always 'true'">s1.isEmpty()</warning></warning>) {}
}
}
void test3(@Nullable String s) {
String s2 = Objects.requireNonNullElseGet(s, () -> "");
if (<warning descr="Condition 's2 == null' is always 'false'">s2 == null</warning>) {}
}
}
@@ -20,4 +20,5 @@ public class DataFlowInspection9Test extends DataFlowInspectionTestCase {
public void testNullabilityJdk9() { doTest();}
public void testMutabilityJdk9() { doTest();}
public void testMutabilityInferred() { doTest(); }
public void testObjectsRequireNonNullElse() { doTest(); }
}