From c985b00fa42e269b4083750e926ea015ba22ae92 Mon Sep 17 00:00:00 2001 From: Andreas Date: Thu, 1 Jan 2026 16:18:59 +0100 Subject: [PATCH] SONARJAVA java:S6204 should not raise an issue when addFirst/addLast/removeFirst/removeLast is called on the list --- .../checks/CollectorsToListCheckSample.java | 20 +++++++++++++++++++ .../java/checks/CollectorsToListCheck.java | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/java-checks-test-sources/default/src/main/java/checks/CollectorsToListCheckSample.java b/java-checks-test-sources/default/src/main/java/checks/CollectorsToListCheckSample.java index 7f017ef33c4..f6e4636a7b6 100644 --- a/java-checks-test-sources/default/src/main/java/checks/CollectorsToListCheckSample.java +++ b/java-checks-test-sources/default/src/main/java/checks/CollectorsToListCheckSample.java @@ -119,6 +119,26 @@ void compliant() { .collect(Collectors.toList()); // Compliant, list5 needs to be mutable list5.removeIf(s -> true); + + List list6 = Stream.of("B", "C", "D") + .collect(Collectors.toList()); // Compliant, list6 needs to be mutable + + list6.addFirst("A"); + + List list7 = Stream.of("A", "B", "C") + .collect(Collectors.toList()); // Compliant, list7 needs to be mutable + + list7.addLast("D"); + + List list8 = Stream.of("A", "B", "C") + .collect(Collectors.toList()); // Compliant, list8 needs to be mutable + + list8.removeFirst(); + + List list9 = Stream.of("A", "B", "C") + .collect(Collectors.toList()); // Compliant, list9 needs to be mutable + + list9.removeLast(); } void addX() { diff --git a/java-checks/src/main/java/org/sonar/java/checks/CollectorsToListCheck.java b/java-checks/src/main/java/org/sonar/java/checks/CollectorsToListCheck.java index 4dfcb43ddb4..e6c55758f04 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/CollectorsToListCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/CollectorsToListCheck.java @@ -58,7 +58,8 @@ public class CollectorsToListCheck extends AbstractMethodDetection implements Ja private static final MethodMatchers LIST_MODIFICATION_METHODS = MethodMatchers.create() .ofSubTypes("java.util.List") - .names("add", "addAll", "remove", "removeAll", "retainAll", "replaceAll", "set", "sort", "clear", "removeIf") + .names("add", "addAll", "remove", "removeAll", "retainAll", "replaceAll", "set", "sort", "clear", "removeIf", + "addFirst", "addLast", "removeFirst", "removeLast") .withAnyParameters() .build();