From bf9c220dfceef52195ec7ebf0fd633b50994d56a Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 21 Oct 2024 15:33:27 +0200 Subject: [PATCH] [java-inspections] Uncomment old 'toList() can be used' tests; fix false-positives Some false-negatives still exist but they are rare cases, so let's skip them for now GitOrigin-RevId: 7c3af14c332768267123320f1601dd1fd76ff240 --- ...atchedCollectionQueryUpdateInspection.java | 2 + .../CollectCollectorsToList.java | 117 +++++++++--------- 2 files changed, 60 insertions(+), 59 deletions(-) diff --git a/java/java-impl/src/com/siyeh/ig/bugs/MismatchedCollectionQueryUpdateInspection.java b/java/java-impl/src/com/siyeh/ig/bugs/MismatchedCollectionQueryUpdateInspection.java index 3b7d26ae0150..7ab294a0a61f 100644 --- a/java/java-impl/src/com/siyeh/ig/bugs/MismatchedCollectionQueryUpdateInspection.java +++ b/java/java-impl/src/com/siyeh/ig/bugs/MismatchedCollectionQueryUpdateInspection.java @@ -659,6 +659,8 @@ public final class MismatchedCollectionQueryUpdateInspection extends BaseInspect PsiElement parent = effectiveReference.getParent(); Set ignored = new HashSet<>(); if (parent instanceof PsiAssignmentExpression assignmentExpression) { + // Do not process when the result of assignment is used: rare case + if (!ExpressionUtils.isVoidContext(assignmentExpression)) return false; if(assignmentExpression.getLExpression() instanceof PsiReferenceExpression referenceExpression){ ignored.add(referenceExpression); parent = referenceExpression.resolve(); diff --git a/java/java-tests/testData/inspection/simplifyStreamApiCallChains/CollectCollectorsToList.java b/java/java-tests/testData/inspection/simplifyStreamApiCallChains/CollectCollectorsToList.java index e3b6aa9082fa..261131bc6a4b 100644 --- a/java/java-tests/testData/inspection/simplifyStreamApiCallChains/CollectCollectorsToList.java +++ b/java/java-tests/testData/inspection/simplifyStreamApiCallChains/CollectCollectorsToList.java @@ -185,64 +185,63 @@ class MissingIteratorRemoveAnalysis { System.out.println(string); } } -} -//class TODO() { -// -// void testMustHave1(Stream stream) { -// List list1; -// list1 = stream.collect(Collectors.toList()); -// list1.forEach(System.out::println); -// } -// -// void testMustHave2(Stream stream) { -// List list1; -// list1 = stream.collect(Collectors.toList()); -// list1.add("foo"); -// } -// -// void test1(Stream stream) { -// List list1; -// List list2; -// list1 = ((list2 = ((stream.collect(Collectors.toList()))))); -// list1.forEach(System.out::println); -// list2.forEach(System.out::println); -// } -// -// void test2(Stream stream) { -// List list1; -// List list2; -// list1 = ((list2 = ((stream.collect(Collectors.toList()))))); -// list1.add("foo"); -// } -// -// void test3(Stream stream) { -// List list1; -// List list2; -// list1 = ((list2 = ((stream.collect(Collectors.toList()))))); -// list2.add("foo"); -// } -// -// void test4(Stream stream) { -// List list1; -// list1 = stream.collect(Collectors.toList()); -// list1.add("foo"); -// } -// -// void test5(Stream stream) { -// List subList = stream.collect(Collectors.toList()).subList(0, 3); -// subList.add("foo"); -// } -// -// void test6(Stream stream) { -// List subList = stream.collect(Collectors.toList()).subList(0, 3); -// subList.forEach(System.out::println); -// } + void testMustHave1(Stream stream) { + List list1; + list1 = stream.collect(Collectors.toList()); + list1.forEach(System.out::println); + } -// void test7(Stream stream) { -// List list = stream.collect(Collectors.toList()); -// list.forEach(System.out::println); -// list = new ArrayList<>(); -// list.add("foo"); -// } -//} \ No newline at end of file + void testMustHave2(Stream stream) { + List list1; + list1 = stream.collect(Collectors.toList()); + list1.add("foo"); + } + + void test1(Stream stream) { + List list1; + List list2; + // Theoretically could be supported but for now we ignore cases when assignment result is used + list1 = ((list2 = ((stream.collect(Collectors.toList()))))); + list1.forEach(System.out::println); + list2.forEach(System.out::println); + } + + void test2(Stream stream) { + List w1; + List w2; + w1 = ((w2 = ((stream.collect(Collectors.toList()))))); + w1.add("foo"); + } + + void test3(Stream stream) { + List w1; + List w2; + w1 = ((w2 = ((stream.collect(Collectors.toList()))))); + w2.add("foo"); + } + + void test4(Stream stream) { + List list1; + list1 = stream.collect(Collectors.toList()); + list1.add("foo"); + } + + void test5(Stream stream) { + List subList = stream.collect(Collectors.toList()).subList(0, 3); + subList.add("foo"); + } + + void test6(Stream stream) { + List subList = stream.collect(Collectors.toList()).subList(0, 3); + subList.forEach(System.out::println); + } + + // TODO + void test7(Stream stream) { + List list = stream.collect(Collectors.toList()); + list.forEach(System.out::println); + list = new ArrayList<>(); + list.add("foo"); + } +} \ No newline at end of file