diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/StreamComparatorInlining.java b/java/java-tests/testData/inspection/dataFlow/fixture/StreamComparatorInlining.java new file mode 100644 index 000000000000..36a50f657407 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/StreamComparatorInlining.java @@ -0,0 +1,49 @@ +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; +import java.util.stream.*; + +public class StreamComparatorInlining { + static class Holder { + @Nullable String nullable; + + @Nullable String getNullable() { + return nullable; + } + } + + @Nullable String process(String s) { + return s.isEmpty() ? null : s; + } + + void testMinMax(List list) { + list.stream().map(this::process).max(Comparator.naturalOrder()); + list.stream().map(this::process).max(Comparator.nullsFirst(Comparator.naturalOrder())); + list.stream().map(this::process).max(Comparator.nullsFirst(Comparator.comparing(String::length))); + list.stream().map(this::process).min(Comparator.nullsLast(Comparator.comparing(String::length))); + list.stream().map(this::process).min(Comparator.comparing(String::length)); + list.stream().map(this::process).min(Comparator.comparing(String::length).reversed()); + } + + void testSorted(List list) { + list.stream().sorted(Comparator.comparing(this::process, Comparator.reverseOrder())).collect(Collectors.toList()); + list.stream().sorted(Comparator.comparing(this::process)).collect(Collectors.toList()); + list.stream().sorted(Comparator.comparing(this::process, Comparator.nullsFirst(Comparator.naturalOrder()))).collect(Collectors.toList()); + list.stream().map(this::process).sorted(Comparator.comparing(String::length)).collect(Collectors.toList()); + list.stream().map(this::process).sorted().collect(Collectors.toList()); + list.stream().map(this::process).sorted(String::compareToIgnoreCase).collect(Collectors.toList()); + list.stream().map(this::process).sorted(String.CASE_INSENSITIVE_ORDER).collect(Collectors.toList()); + } + + void testSortedCheck(List holders) { + holders.stream().sorted(Comparator.comparing(h -> h.nullable)).toArray(); + holders.stream().filter(h -> h.nullable != null).sorted(Comparator.comparing(h -> h.nullable)).toArray(); + + holders.stream().sorted(Comparator.comparing(h -> h.getNullable())).toArray(); + holders.stream().filter(h -> h.getNullable() != null).sorted(Comparator.comparing(h -> h.getNullable())).toArray(); + + holders.stream().sorted(Comparator.comparing(Holder::getNullable)).toArray(); + holders.stream().filter(h -> h.getNullable() != null).sorted(Comparator.comparing(Holder::getNullable)).toArray(); + } +} diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/StreamInlining.java b/java/java-tests/testData/inspection/dataFlow/fixture/StreamInlining.java index d48cf36358b6..f38d46c725a6 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/StreamInlining.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/StreamInlining.java @@ -38,11 +38,6 @@ public class StreamInlining { static class Holder { Object obj; - @Nullable String nullable; - - @Nullable String getNullable() { - return nullable; - } } int hash(List holders) { @@ -136,38 +131,4 @@ public class StreamInlining { Stream.generate(() -> Optional.of("xyz")).filter(Optional::isPresent).forEach(System.out::println); LongStream.generate(() -> 5).limit(10).filter(x -> x > 6).forEach(s -> System.out.println(s)); } - - @Nullable String process(String s) { - return s.isEmpty() ? null : s; - } - - void testMinMax(List list) { - list.stream().map(this::process).max(Comparator.naturalOrder()); - list.stream().map(this::process).max(Comparator.nullsFirst(Comparator.naturalOrder())); - list.stream().map(this::process).max(Comparator.nullsFirst(Comparator.comparing(String::length))); - list.stream().map(this::process).min(Comparator.nullsLast(Comparator.comparing(String::length))); - list.stream().map(this::process).min(Comparator.comparing(String::length)); - list.stream().map(this::process).min(Comparator.comparing(String::length).reversed()); - } - - void testSorted(List list) { - list.stream().sorted(Comparator.comparing(this::process, Comparator.reverseOrder())).collect(Collectors.toList()); - list.stream().sorted(Comparator.comparing(this::process)).collect(Collectors.toList()); - list.stream().sorted(Comparator.comparing(this::process, Comparator.nullsFirst(Comparator.naturalOrder()))).collect(Collectors.toList()); - list.stream().map(this::process).sorted(Comparator.comparing(String::length)).collect(Collectors.toList()); - list.stream().map(this::process).sorted().collect(Collectors.toList()); - list.stream().map(this::process).sorted(String::compareToIgnoreCase).collect(Collectors.toList()); - list.stream().map(this::process).sorted(String.CASE_INSENSITIVE_ORDER).collect(Collectors.toList()); - } - - void testSortedCheck(List holders) { - holders.stream().sorted(Comparator.comparing(h -> h.nullable)).toArray(); - holders.stream().filter(h -> h.nullable != null).sorted(Comparator.comparing(h -> h.nullable)).toArray(); - - holders.stream().sorted(Comparator.comparing(h -> h.getNullable())).toArray(); - holders.stream().filter(h -> h.getNullable() != null).sorted(Comparator.comparing(h -> h.getNullable())).toArray(); - - holders.stream().sorted(Comparator.comparing(Holder::getNullable)).toArray(); - holders.stream().filter(h -> h.getNullable() != null).sorted(Comparator.comparing(Holder::getNullable)).toArray(); - } } diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java index c38437578c7f..7cd89c5f7851 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java @@ -195,6 +195,7 @@ public class DataFlowInspection8Test extends DataFlowInspectionTestCase { doTest(); } public void testStreamInlining() { doTest(); } + public void testStreamComparatorInlining() { doTest(); } public void testStreamKnownSource() { doTest(); } public void testMethodVsExpressionTypeAnnotationConflict() {