Skip to content

Commit f8af718

Browse files
(Sonar) Fixed finding: "Stream.toList() should be used instead of collectors" (#430)
## Remediation This change fixes "`Stream.toList()` should be used instead of `collectors`" (id = [java:S6204](https://rules.sonarsource.com/java/RSPEC-6204)) identified by Sonar. ## Details This change modernizes a stream's `List` creation to be driven from the simple, and more readable [`Stream#toList()`](https://docs.oracle.com/javase/16/docs/api/java.base/java/util/stream/Collectors.html#toList()) method. Our changes look something like this: ```diff - List<Integer> numbers = someStream.collect(Collectors.toList()); + List<Integer> numbers = someStream.toList(); ``` <details> <summary>More reading</summary> * [https://rules.sonarsource.com/java/RSPEC-6204/](https://rules.sonarsource.com/java/RSPEC-6204/) </details> 🧚🤖 Powered by Pixeebot [Feedback](https://ask.pixee.ai/feedback) | [Community](https://pixee-community.slack.com/signup#/domain-signup) | [Docs](https://docs.pixee.ai/) | Codemod ID: [sonar:java/replace-stream-collectors-to-list-s6204](https://docs.pixee.ai/codemods/java/sonar_java_replace-stream-collectors-to-list-s6204) ![](https://d1zaessa2hpsmj.cloudfront.net/pixel/v1/track?writeKey=2PI43jNm7atYvAuK7rJUz3Kcd6A&event=DRIP_PR%7Cpixee%2Fcodemodder-java%7C3fbd9552ce45b43b166a67aade0450c3c7a085c2) <!--{"type":"DRIP","codemod":"sonar:java/replace-stream-collectors-to-list-s6204"}--> --------- Co-authored-by: pixeebot[bot] <104101892+pixeebot[bot]@users.noreply.github.com> Co-authored-by: Ryan Dens <[email protected]>
1 parent a069684 commit f8af718

File tree

10 files changed

+14
-31
lines changed

10 files changed

+14
-31
lines changed

core-codemods/src/main/java/io/codemodder/codemods/VerbTamperingCodemod.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.util.Objects;
1111
import java.util.Optional;
1212
import java.util.Set;
13-
import java.util.stream.Collectors;
1413
import javax.inject.Inject;
1514
import javax.xml.stream.XMLEventReader;
1615
import javax.xml.stream.XMLEventWriter;
@@ -62,8 +61,7 @@ private List<CodemodChange> processWebXml(final CodemodInvocationContext context
6261
Set<Integer> linesAffected = xmlChange.linesAffected();
6362

6463
// add the weaves to the context
65-
List<CodemodChange> changes =
66-
linesAffected.stream().map(CodemodChange::from).collect(Collectors.toList());
64+
List<CodemodChange> changes = linesAffected.stream().map(CodemodChange::from).toList();
6765

6866
// overwrite the previous web.xml with the new one
6967
Files.copy(xmlChange.transformedXml(), file, StandardCopyOption.REPLACE_EXISTING);
@@ -107,8 +105,6 @@ public String getIndividualChangeDescription(final Path filePath, final CodemodC
107105

108106
@Override
109107
public List<CodeTFReference> getReferences() {
110-
return reporter.getReferences().stream()
111-
.map(u -> new CodeTFReference(u, u))
112-
.collect(Collectors.toList());
108+
return reporter.getReferences().stream().map(u -> new CodeTFReference(u, u)).toList();
113109
}
114110
}

framework/codemodder-base/src/main/java/io/codemodder/CLI.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -485,9 +485,7 @@ public Integer call() throws IOException {
485485
reportGenerator.createReport(
486486
projectDirectory.toPath(),
487487
String.join(" ", args),
488-
sarifs == null
489-
? List.of()
490-
: sarifs.stream().map(Path::of).collect(Collectors.toList()),
488+
sarifs == null ? List.of() : sarifs.stream().map(Path::of).toList(),
491489
results,
492490
elapsed);
493491
ObjectMapper mapper = new ObjectMapper();

framework/codemodder-base/src/main/java/io/codemodder/CodemodReporterStrategy.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.nio.file.Path;
99
import java.util.List;
1010
import java.util.Objects;
11-
import java.util.stream.Collectors;
1211
import java.util.stream.StreamSupport;
1312
import org.apache.commons.io.IOUtils;
1413
import org.jetbrains.annotations.NotNull;
@@ -116,9 +115,7 @@ private static CodemodReporterStrategy getCodemodReporterStrategy(
116115
String change = parent.get("change").asText();
117116
ArrayNode referencesNode = (ArrayNode) parent.get("references");
118117
List<String> references =
119-
StreamSupport.stream(referencesNode.spliterator(), false)
120-
.map(JsonNode::asText)
121-
.collect(Collectors.toList());
118+
StreamSupport.stream(referencesNode.spliterator(), false).map(JsonNode::asText).toList();
122119

123120
return new CodemodReporterStrategy() {
124121
@Override

framework/codemodder-base/src/main/java/io/codemodder/DefaultCodemodExecutor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ private FilesUpdateResult updateFiles(
243243
List<Path> filesFailedToChange = List.of();
244244

245245
// update the dependencies in the manifest file if needed
246+
// We suppress warnings because we conditionally remove items from this list instance
247+
@SuppressWarnings("java:S6204")
246248
List<DependencyGAV> dependencies =
247249
codemodChanges.stream()
248250
.map(CodemodChange::getDependenciesNeeded)
@@ -267,7 +269,7 @@ private FilesUpdateResult updateFiles(
267269
.map(
268270
change ->
269271
translateCodemodChangetoCodeTFChange(codeChanger, filePath, change, pkgActions))
270-
.collect(Collectors.toList());
272+
.toList();
271273

272274
// make sure we add the file's entry first, then the dependency entries, so the causality
273275
// is clear

framework/codemodder-base/src/main/java/io/codemodder/DefaultXPathStreamProcessor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public Optional<XPathStreamProcessChange> process(
5858
DocumentHelper.selectNodes(xpathExpression, doc).stream()
5959
.map(node -> (LocationAwareElement) node)
6060
.map(element -> new Position(element.getLine(), element.getColumn()))
61-
.collect(Collectors.toUnmodifiableList());
61+
.toList();
6262

6363
if (httpMethodPositions.isEmpty()) {
6464
return Optional.empty();
@@ -97,7 +97,7 @@ public Optional<XPathStreamProcessChange> process(
9797
// remove the empty leftover lines affected by our changes if there are any
9898
Set<Integer> linesAffected =
9999
httpMethodPositions.stream().map(pos -> pos.line()).collect(Collectors.toUnmodifiableSet());
100-
List<String> lines = transformedXml.lines().collect(Collectors.toUnmodifiableList());
100+
List<String> lines = transformedXml.lines().toList();
101101
List<String> updatedLines = new ArrayList<>(lines.size() - linesAffected.size());
102102
for (int i = 1; i <= lines.size(); i++) {
103103
String actualLine = lines.get(i - 1);

framework/codemodder-base/src/main/java/io/codemodder/ParameterModule.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.Objects;
77
import java.util.regex.Matcher;
88
import java.util.regex.Pattern;
9-
import java.util.stream.Collectors;
109

1110
/**
1211
* Responsible for binding {@link Parameter}s to codemods. Also performs validation to ensure
@@ -33,7 +32,7 @@ protected void configure() {
3332
this.injectableParameters.stream()
3433
.filter(param -> param.isAnnotationPresent(CodemodParameter.class))
3534
.filter(param -> param.getType().equals(Parameter.class))
36-
.collect(Collectors.toUnmodifiableList());
35+
.toList();
3736

3837
for (java.lang.reflect.Parameter param : codemodParameters) {
3938
CodemodParameter codemodParameter = param.getAnnotation(CodemodParameter.class);

framework/codemodder-base/src/main/java/io/codemodder/RawFileChanger.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.io.IOException;
55
import java.nio.file.Path;
66
import java.util.List;
7-
import java.util.stream.Collectors;
87

98
/** Gives access to raw files for performing arbitrary changes. */
109
public abstract class RawFileChanger implements CodeChanger {
@@ -45,8 +44,6 @@ public String getIndividualChangeDescription(final Path filePath, final CodemodC
4544

4645
@Override
4746
public List<CodeTFReference> getReferences() {
48-
return reporter.getReferences().stream()
49-
.map(u -> new CodeTFReference(u, u))
50-
.collect(Collectors.toList());
47+
return reporter.getReferences().stream().map(u -> new CodeTFReference(u, u)).toList();
5148
}
5249
}

framework/codemodder-base/src/main/java/io/codemodder/javaparser/JavaParserChanger.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import io.codemodder.codetf.CodeTFReference;
66
import java.nio.file.Path;
77
import java.util.List;
8-
import java.util.stream.Collectors;
98

109
/** Uses JavaParser to change Java source files. */
1110
public abstract class JavaParserChanger implements CodeChanger {
@@ -41,8 +40,6 @@ public String getIndividualChangeDescription(final Path filePath, final CodemodC
4140

4241
@Override
4342
public List<CodeTFReference> getReferences() {
44-
return reporter.getReferences().stream()
45-
.map(u -> new CodeTFReference(u, u))
46-
.collect(Collectors.toList());
43+
return reporter.getReferences().stream().map(u -> new CodeTFReference(u, u)).toList();
4744
}
4845
}

plugins/codemodder-plugin-maven/src/main/java/io/codemodder/plugins/maven/operator/POMOperator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.net.URISyntaxException;
77
import java.nio.file.Path;
88
import java.util.*;
9-
import java.util.stream.Collectors;
109
import javax.xml.stream.XMLStreamException;
1110
import org.dom4j.DocumentException;
1211
import org.jetbrains.annotations.NotNull;
@@ -183,7 +182,7 @@ static Optional<VersionQueryResponse> queryVersions(ProjectModel projectModel)
183182
if (queryVersionResult.size() == 1) {
184183
List<VersionDefinition> queryVersionResultList =
185184
queryVersionResult != null && !queryVersionResult.isEmpty()
186-
? queryVersionResult.stream().collect(Collectors.toList())
185+
? queryVersionResult.stream().toList()
187186
: Collections.emptyList();
188187
Version mappedVersion = mapVersion(queryVersionResultList.get(0).getValue());
189188

plugins/codemodder-plugin-maven/src/main/java/io/codemodder/plugins/maven/operator/ProjectModelFactory.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.net.URL;
77
import java.nio.file.Path;
88
import java.util.*;
9-
import java.util.stream.Collectors;
109
import org.dom4j.DocumentException;
1110

1211
/**
@@ -47,8 +46,7 @@ public ProjectModelFactory withPomFile(POMDocument pomFile) {
4746
*/
4847
public ProjectModelFactory withParentPomFiles(Collection<POMDocument> parentPomFiles) {
4948
this.parentPomFiles =
50-
new ArrayList<>(
51-
parentPomFiles.stream().filter(Objects::nonNull).collect(Collectors.toList()));
49+
new ArrayList<>(parentPomFiles.stream().filter(Objects::nonNull).toList());
5250
return this;
5351
}
5452

0 commit comments

Comments
 (0)