diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/HardcodedContracts.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/HardcodedContracts.java index 5d18c48f5338..f9987dfdcce3 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/HardcodedContracts.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/HardcodedContracts.java @@ -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()))) diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/QueuePeek.java b/java/java-tests/testData/inspection/dataFlow/fixture/QueuePeek.java index f3e29161d0b2..ac78beddab7d 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/QueuePeek.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/QueuePeek.java @@ -26,4 +26,11 @@ class ThisAsVariable { void notCheck(Queue queue) { System.out.println(queue.peek().trim()); } + + void checkGetFirstPollFirst(Deque queue) { + if ("bar".equals(queue.getFirst())) { + String first = queue.pollFirst(); + System.out.println(first.toString()); + } + } }