Files
openide/java/java-tests/testData/inspection/dataFlow/fixture/StreamGroupingBy.java
T
Tagir Valeevandintellij-monorepo-bot 4faa707528 [java-dfa] Support groupingBy/partitioningBy/groupingByConcurrent collectors, to some extent (w/o downstream)
Fixes IDEA-302543 'Optional.get()' without 'isPresent()' in groupingBy Collector despite checking it earlier with filter in the stream

GitOrigin-RevId: c562ca1479e32c16517474db937528808c1f0fb8
2022-09-28 15:09:38 +00:00

31 lines
2.0 KiB
Java

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
class Demo {
void test(List<String> list) {
Map<String, List<String>> map1 = list.stream()
.filter(Objects::isNull)
.collect(Collectors.groupingBy(x -> x.<warning descr="Method invocation 'trim' will produce 'NullPointerException'">trim</warning>()));
if (list.isEmpty() && <warning descr="Condition 'map1.isEmpty()' is always 'true' when reached">map1.isEmpty()</warning>) {}
Map<String, List<String>> map2 = list.stream()
.filter(Objects::isNull)
.collect(Collectors.groupingByConcurrent(x -> x.<warning descr="Method invocation 'trim' will produce 'NullPointerException'">trim</warning>(), Collectors.toList()));
Map<String, List<String>> map3 = list.stream()
.filter(Objects::isNull)
.collect(Collectors.groupingBy(<warning descr="Passing 'null' argument to parameter annotated as @NotNull">null</warning>, <warning descr="Passing 'null' argument to parameter annotated as @NotNull">null</warning>, <warning descr="Passing 'null' argument to parameter annotated as @NotNull">null</warning>));
Map<String, List<String>> map4 = list.stream()
.filter(Objects::isNull)
.collect(Collectors.groupingBy(x -> <warning descr="Function may return null, but it's not allowed here">null</warning>));
Map<Boolean, List<String>> map5 = list.stream()
.filter(x -> !x.isEmpty())
.collect(Collectors.partitioningBy(x -> <warning descr="Result of 'x.isEmpty()' is always 'false'">x.isEmpty()</warning>));
Map<Boolean, List<String>> map6 = list.stream()
.filter(x -> x.isEmpty())
.collect(Collectors.partitioningBy(x -> <warning descr="Result of 'x.isEmpty()' is always 'true'">x.isEmpty()</warning>, Collectors.toList()));
Map<Boolean, List<String>> map7 = list.stream()
.filter(x -> !x.isEmpty())
.collect(Collectors.partitioningBy(x -> <warning descr="Result of 'list.isEmpty()' is always 'false'">list.isEmpty()</warning>, Collectors.toList()));
}
}