HardcodedContracts: support Deque#getFirst, getLast; Queue#element

Fixes IDEA-223629 'Method invocation may produce NullPointerException' false positive for ArrayDeque.pollFirst()

GitOrigin-RevId: e1284cb51c0a1f5a12683a57c58b085de6e5b705
This commit is contained in:
Tagir Valeev
2019-09-27 03:39:28 +00:00
committed by intellij-monorepo-bot
parent 692d4b2d94
commit 4ba3bce5f4
2 changed files with 11 additions and 1 deletions
@@ -109,7 +109,10 @@ public class HardcodedContracts {
ContractValue.qualifier().specialField(SpecialField.COLLECTION_SIZE), RelationType.EQ, ContractValue.zero(), returnFalse())))
.register(instanceCall(JAVA_UTIL_LIST, "get").parameterTypes("int"),
ContractProvider.of(specialFieldRangeContract(0, RelationType.LT, SpecialField.COLLECTION_SIZE)))
.register(instanceCall("java.util.SortedSet", "first", "last").parameterCount(0),
.register(anyOf(
instanceCall("java.util.SortedSet", "first", "last").parameterCount(0),
instanceCall("java.util.Deque", "getFirst", "getLast").parameterCount(0),
instanceCall("java.util.Queue", "element").parameterCount(0)),
ContractProvider.of(singleConditionContract(
ContractValue.qualifier().specialField(SpecialField.COLLECTION_SIZE), RelationType.EQ,
ContractValue.zero(), fail())))
@@ -26,4 +26,11 @@ class ThisAsVariable {
void notCheck(Queue<String> queue) {
System.out.println(queue.peek().<warning descr="Method invocation 'trim' may produce 'NullPointerException'">trim</warning>());
}
void checkGetFirstPollFirst(Deque<String> queue) {
if ("bar".equals(queue.getFirst())) {
String first = queue.pollFirst();
System.out.println(first.toString());
}
}
}