diff --git a/its/autoscan/src/test/java/org/sonar/java/it/AutoScanTest.java b/its/autoscan/src/test/java/org/sonar/java/it/AutoScanTest.java index b2cb90f4f9b..abf0ff870c7 100644 --- a/its/autoscan/src/test/java/org/sonar/java/it/AutoScanTest.java +++ b/its/autoscan/src/test/java/org/sonar/java/it/AutoScanTest.java @@ -161,13 +161,13 @@ public void javaCheckTestSources() throws Exception { newTotal.falsePositives, newTotal.falsePositives + newTotal.falseNegatives); - List rulesCausingFPs = newDiffs.stream().filter(IssueDiff::causesFPs).collect(Collectors.toList()); + List rulesCausingFPs = newDiffs.stream().filter(IssueDiff::causesFPs).toList(); LOG.info("{} rules causing FPs:\n{}", rulesCausingFPs.size(), IssueDiff.prettyPrint(rulesCausingFPs)); - List rulesNotReporting = newDiffs.stream().filter(IssueDiff::notReporting).collect(Collectors.toList()); + List rulesNotReporting = newDiffs.stream().filter(IssueDiff::notReporting).toList(); LOG.info("{} rules never reporting anything:\n{}", rulesNotReporting.size(), IssueDiff.prettyPrint(rulesNotReporting)); - List rulesSilenced = newDiffs.stream().filter(IssueDiff::onlyFNs).collect(Collectors.toList()); + List rulesSilenced = newDiffs.stream().filter(IssueDiff::onlyFNs).toList(); LOG.info("{} rules silenced without binaries (only FNs):\n{}", rulesSilenced.size(), IssueDiff.prettyPrint(rulesSilenced)); // Load known diffs diff --git a/its/plugin/tests/src/test/java/com/sonar/it/java/suite/ExternalReportTest.java b/its/plugin/tests/src/test/java/com/sonar/it/java/suite/ExternalReportTest.java index 2fbde352a22..3ac9278f258 100644 --- a/its/plugin/tests/src/test/java/com/sonar/it/java/suite/ExternalReportTest.java +++ b/its/plugin/tests/src/test/java/com/sonar/it/java/suite/ExternalReportTest.java @@ -23,7 +23,6 @@ import com.sonar.orchestrator.build.MavenBuild; import java.io.File; import java.util.List; -import java.util.stream.Collectors; import org.junit.ClassRule; import org.junit.Test; import org.sonarqube.ws.Common.Severity; @@ -97,7 +96,7 @@ private List getExternalIssues(String projectKey) { return TestUtils.issuesForComponent(orchestrator, projectKey) .stream() .filter(issue -> issue.getRule().startsWith("external_")) - .collect(Collectors.toList()); + .toList(); } } diff --git a/its/plugin/tests/src/test/java/com/sonar/it/java/suite/PackageInfoTest.java b/its/plugin/tests/src/test/java/com/sonar/it/java/suite/PackageInfoTest.java index ae8bb2197b9..1bf102dc649 100644 --- a/its/plugin/tests/src/test/java/com/sonar/it/java/suite/PackageInfoTest.java +++ b/its/plugin/tests/src/test/java/com/sonar/it/java/suite/PackageInfoTest.java @@ -23,7 +23,6 @@ import com.sonar.orchestrator.build.MavenBuild; import java.util.List; import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.junit.ClassRule; import org.junit.Test; import org.sonarqube.ws.Issues.Issue; @@ -55,11 +54,11 @@ public void should_detect_package_info_issues() { assertThat(issues.stream().map(Issue::getLine)).allMatch(line -> line == 0); Pattern packagePattern = Pattern.compile("'org\\.package[12]'"); - List s1228Issues = issues.stream().filter(issue -> issue.getRule().equals("java:S1228")).collect(Collectors.toList()); + List s1228Issues = issues.stream().filter(issue -> issue.getRule().equals("java:S1228")).toList(); assertThat(s1228Issues).hasSize(2); assertThat(s1228Issues).extracting(Issue::getMessage).allMatch(msg -> packagePattern.matcher(msg).find()); - List s4032Issues = issues.stream().filter(issue -> issue.getRule().equals("java:S4032")).collect(Collectors.toList()); + List s4032Issues = issues.stream().filter(issue -> issue.getRule().equals("java:S4032")).toList(); assertThat(s4032Issues).hasSize(1); assertThat(s4032Issues.get(0).getMessage()).isEqualTo("Remove this package."); assertThat(s4032Issues.get(0).getComponent()).isEqualTo(projectKey + ":src/main/other-src/org/package4/package-info.java"); diff --git a/java-checks-aws/src/main/java/org/sonar/java/checks/aws/AwsLambdaSyncCallCheck.java b/java-checks-aws/src/main/java/org/sonar/java/checks/aws/AwsLambdaSyncCallCheck.java index 1847b2645e3..5b851783059 100644 --- a/java-checks-aws/src/main/java/org/sonar/java/checks/aws/AwsLambdaSyncCallCheck.java +++ b/java-checks-aws/src/main/java/org/sonar/java/checks/aws/AwsLambdaSyncCallCheck.java @@ -24,7 +24,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.ExpressionsHelper; import org.sonar.java.model.ExpressionUtils; @@ -86,7 +85,7 @@ private static Optional getSyncCalls(MethodInvocationTree tree) { // We know there is at least one usage, i.e. the one we just got above. List localUsages = invokeRequest.symbol().usages().stream() .filter(u -> u.symbol().isLocalVariable() && !u.equals(invokeRequest)) - .collect(Collectors.toList()); + .toList(); if (invokeRequest.symbol().isParameter() || localUsages.stream().anyMatch(lu -> isArgumentToACall(lu) || statementSetsAsyncCall(lu)) diff --git a/java-checks-aws/src/test/java/org/sonar/java/checks/security/HardCodedCredentialsShouldNotBeUsedCheckTest.java b/java-checks-aws/src/test/java/org/sonar/java/checks/security/HardCodedCredentialsShouldNotBeUsedCheckTest.java index 12f63ca4345..764cf03200a 100644 --- a/java-checks-aws/src/test/java/org/sonar/java/checks/security/HardCodedCredentialsShouldNotBeUsedCheckTest.java +++ b/java-checks-aws/src/test/java/org/sonar/java/checks/security/HardCodedCredentialsShouldNotBeUsedCheckTest.java @@ -21,7 +21,6 @@ import java.util.List; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.slf4j.event.Level; @@ -44,7 +43,7 @@ void uses_empty_collection_when_methods_cannot_be_loaded() { assertThat(check.getMethods()).isEmpty(); List logs = logTester.getLogs(Level.ERROR).stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(logs) .containsOnly("Could not load methods from \"non-existing-file.json\"."); } diff --git a/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/FilesUtils.java b/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/FilesUtils.java index 0456e48c4d1..dc45451ae27 100644 --- a/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/FilesUtils.java +++ b/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/FilesUtils.java @@ -29,7 +29,6 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; import org.sonar.java.annotations.VisibleForTesting; public final class FilesUtils { @@ -74,6 +73,6 @@ public FileVisitResult visitFileFailed(Path file, IOException exc) { // we already ignore errors in the visitor } - return files.stream().sorted().collect(Collectors.toList()); + return files.stream().sorted().toList(); } } diff --git a/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/internal/Expectations.java b/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/internal/Expectations.java index 5a3acc0d135..06d6201d35f 100644 --- a/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/internal/Expectations.java +++ b/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/internal/Expectations.java @@ -67,7 +67,6 @@ import org.sonarsource.analyzer.commons.collections.MapBuilder; import static java.util.stream.Collectors.joining; -import static java.util.stream.Collectors.toList; import static org.sonar.java.checks.verifier.internal.Expectations.IssueAttribute.EFFORT_TO_FIX; import static org.sonar.java.checks.verifier.internal.Expectations.IssueAttribute.END_COLUMN; import static org.sonar.java.checks.verifier.internal.Expectations.IssueAttribute.END_LINE; @@ -124,7 +123,9 @@ enum IssueAttribute { } private static Function> multiValueAttribute(Function convert) { - return (String input) -> isNullOrEmpty(input) ? Collections.emptyList() : Arrays.stream(input.split(",")).map(String::trim).map(convert).collect(toList()); + return (String input) -> isNullOrEmpty(input) ? + Collections.emptyList() : + Arrays.stream(input.split(",")).map(String::trim).map(convert).collect(Collectors.toCollection(ArrayList::new)); } private static boolean isNullOrEmpty(@Nullable String input) { @@ -309,14 +310,14 @@ Optional containFlow(List actual) { return Optional.of(flowId); } // more than 1 flow with same lines, let's check messages - List actualMessages = actual.stream().map(AnalyzerMessage::getMessage).collect(toList()); + List actualMessages = actual.stream().map(AnalyzerMessage::getMessage).toList(); Optional foundFlow = expectedFlows.stream().filter(flowId -> hasSameMessages(flowId, actualMessages)).findFirst(); foundFlow.ifPresent(flowId -> seenFlowIds.add(flowId)); return foundFlow; } private boolean hasSameMessages(String flowId, List actualMessages) { - List expectedMessages = flows.get(flowId).stream().map(FlowComment::message).collect(toList()); + List expectedMessages = flows.get(flowId).stream().map(FlowComment::message).toList(); return expectedMessages.equals(actualMessages); } @@ -330,7 +331,7 @@ private static List flowToLines(Collection flow, ToIntFunction getEdit(edit, issueTextSpan, quickFixId)) - .collect(toList()) + .toList() ).build(); quickFixesForIssue.add(javaQuickFix); } @@ -513,7 +514,7 @@ static List parseFlows(@Nullable String comment, int line) { return IntStream.range(0, flowIds.size()) .mapToObj(i -> createFlows(flowIds.get(i), line, flowStarts.get(i), comment.substring(flowStarts.get(i), flowStarts.get(i + 1)))) .flatMap(Function.identity()) - .collect(Collectors.toList()); + .toList(); } private static Stream createFlows(List ids, int line, int startColumn, String flow) { @@ -616,7 +617,7 @@ private static Map convertSecondaryLocations(Map copy = new EnumMap<>(attributes); copy.put(SECONDARY_LOCATIONS, secondaryLocation.stream() .map(stringValue -> relativeValueToInt(line, (String) stringValue)) - .collect(toList())); + .collect(Collectors.toCollection(ArrayList::new))); return copy; } return attributes; diff --git a/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/internal/InternalCheckVerifier.java b/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/internal/InternalCheckVerifier.java index 4bcb2e0f79a..999ae5dadac 100644 --- a/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/internal/InternalCheckVerifier.java +++ b/java-checks-testkit/src/main/java/org/sonar/java/checks/verifier/internal/InternalCheckVerifier.java @@ -220,9 +220,9 @@ public InternalCheckVerifier addFiles(InputFile.Status status, Collection InternalInputFile.inputFile("", new File(name), status)) - .collect(Collectors.toList()); + .toList(); - var filesToAddStrings = filesToAdd.stream().map(Object::toString).collect(Collectors.toList()); + var filesToAddStrings = filesToAdd.stream().map(Object::toString).toList(); files.forEach(inputFile -> { if (filesToAddStrings.contains(inputFile.toString())) { @@ -411,7 +411,7 @@ private void assertMultipleIssues(Set issues, Map expectedLines = expected.keySet().stream().sorted().collect(Collectors.toList()); + List expectedLines = expected.keySet().stream().sorted().toList(); throw new AssertionError(new StringBuilder() .append(expectedLines.isEmpty() ? "" : String.format("Expected at %s", expectedLines)) .append(expectedLines.isEmpty() || unexpectedLines.isEmpty() ? "" : ", ") @@ -488,7 +488,7 @@ private void validateAnalyzerMessageAttributes(Expectations.Issue attrs, Analyze validateLocation(analyzerMessage, attrs); if (attrs.containsKey(SECONDARY_LOCATIONS)) { - List actual = analyzerMessage.flows.stream().map(l -> l.isEmpty() ? null : l.get(0)).filter(Objects::nonNull).collect(Collectors.toList()); + List actual = analyzerMessage.flows.stream().map(l -> l.isEmpty() ? null : l.get(0)).filter(Objects::nonNull).toList(); List expected = (List) attrs.get(SECONDARY_LOCATIONS); validateSecondaryLocations(analyzerMessage, actual, expected); } @@ -498,7 +498,7 @@ private void validateAnalyzerMessageAttributes(Expectations.Issue attrs, Analyze } private static void validateSecondaryLocations(AnalyzerMessage parentIssue, List actual, List expected) { - List actualLines = actual.stream().map(AnalyzerMessage::getLine).collect(Collectors.toList()); + List actualLines = actual.stream().map(AnalyzerMessage::getLine).toList(); List unexpected = new ArrayList<>(); for (Integer actualLine : actualLines) { if (expected.contains(actualLine)) { @@ -559,8 +559,8 @@ private void assertExpectedAndMissingFlows(List expectedFlowIds, List
  • actualFlow) { Set expected = expectations.flows.get(expectedId); - List expectedLines = expected.stream().map(flow -> flow.line).collect(Collectors.toList()); - List actualLines = actualFlow.stream().map(AnalyzerMessage::getLine).collect(Collectors.toList()); + List expectedLines = expected.stream().map(flow -> flow.line).toList(); + List actualLines = actualFlow.stream().map(AnalyzerMessage::getLine).toList(); if (!actualLines.equals(expectedLines)) { throw new AssertionError(String.format("Flow %s has line differences. Expected: %s but was: %s", expectedId, expectedLines, actualLines)); } @@ -599,13 +599,13 @@ private void validateFlowMessages(List actual, String flowId, S List actualMessages = actual.stream() .map(AnalyzerMessage::getMessage) .map(InternalCheckVerifier::addQuotes) - .collect(Collectors.toList()); + .toList(); List expectedMessages = expected.stream() .map(Expectations.FlowComment::message) .map(InternalCheckVerifier::addQuotes) - .collect(Collectors.toList()); + .toList(); - replaceExpectedNullWithActual(actualMessages, expectedMessages); + expectedMessages = replaceExpectedNullWithActual(actualMessages, expectedMessages); if (!actualMessages.equals(expectedMessages)) { throw new AssertionError( String.format("Wrong messages in flow %s [%s]. Expected: %s but was: %s", @@ -620,14 +620,16 @@ private static String addQuotes(@Nullable String s) { return s != null ? String.format("\"%s\"", s) : s; } - private static void replaceExpectedNullWithActual(List actualMessages, List expectedMessages) { - if (actualMessages.size() == expectedMessages.size()) { + private static List replaceExpectedNullWithActual(List actualMessages, List expectedMessages) { + List newExceptedMessages = new ArrayList<>(expectedMessages); + if (actualMessages.size() == newExceptedMessages.size()) { for (int i = 0; i < actualMessages.size(); i++) { - if (expectedMessages.get(i) == null) { - expectedMessages.set(i, actualMessages.get(i)); + if (newExceptedMessages.get(i) == null) { + newExceptedMessages.set(i, actualMessages.get(i)); } } } + return newExceptedMessages; } private static String flowToString(List flow) { diff --git a/java-checks-testkit/src/test/java/org/sonar/java/checks/verifier/CheckVerifierTest.java b/java-checks-testkit/src/test/java/org/sonar/java/checks/verifier/CheckVerifierTest.java index 0fe600f5277..ce684a19820 100644 --- a/java-checks-testkit/src/test/java/org/sonar/java/checks/verifier/CheckVerifierTest.java +++ b/java-checks-testkit/src/test/java/org/sonar/java/checks/verifier/CheckVerifierTest.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.assertj.core.api.Fail; import org.junit.jupiter.api.Test; @@ -40,7 +39,6 @@ import org.sonar.plugins.java.api.JavaFileScannerContext; import org.sonar.plugins.java.api.tree.Tree; -import static java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -581,7 +579,7 @@ public void setContext(JavaFileScannerContext context) { } List anamyerMessages = preciseIssues.values().stream() .flatMap(List::stream) - .collect(Collectors.toList()); + .toList(); for (AnalyzerMessage analyzerMessage : anamyerMessages) { Double messageCost = analyzerMessage.getCost(); Integer cost = messageCost != null ? messageCost.intValue() : null; @@ -589,7 +587,7 @@ public void setContext(JavaFileScannerContext context) { if (!analyzerMessage.flows.isEmpty()) { List> flows = analyzerMessage.flows.stream() .map(FakeVisitor::messagesToLocations) - .collect(toList()); + .toList(); context.reportIssueWithFlow(this, mockTree(analyzerMessage), analyzerMessage.getMessage(), flows, null); } else { reportIssue(mockTree(analyzerMessage), analyzerMessage.getMessage(), secLocations, cost); @@ -601,7 +599,7 @@ public void setContext(JavaFileScannerContext context) { } private static List messagesToLocations(List flow) { - return flow.stream().map(m -> new JavaFileScannerContext.Location(m.getMessage(), mockTree(m))).collect(toList()); + return flow.stream().map(m -> new JavaFileScannerContext.Location(m.getMessage(), mockTree(m))).toList(); } private static Tree mockTree(final AnalyzerMessage analyzerMessage) { diff --git a/java-checks-testkit/src/test/java/org/sonar/java/checks/verifier/internal/ExpectationsTest.java b/java-checks-testkit/src/test/java/org/sonar/java/checks/verifier/internal/ExpectationsTest.java index cbb735bc59f..0e76e89b707 100644 --- a/java-checks-testkit/src/test/java/org/sonar/java/checks/verifier/internal/ExpectationsTest.java +++ b/java-checks-testkit/src/test/java/org/sonar/java/checks/verifier/internal/ExpectationsTest.java @@ -235,7 +235,7 @@ void issue_and_multiple_flows_on_the_same_line() { TEST_LINE); assertThat(iaf.issue).containsEntry(MESSAGE, "issue msg"); assertThat(iaf.flows).hasSize(3); - List lines = iaf.flows.stream().map(f -> f.line).collect(Collectors.toList()); + List lines = iaf.flows.stream().map(f -> f.line).toList(); assertThat(lines).isEqualTo(Arrays.asList(TEST_LINE, TEST_LINE, TEST_LINE)); Map idMsgMap = iaf.flows.stream().collect(Collectors.toMap(f -> f.id, f -> MESSAGE.get(f.attributes))); assertThat(idMsgMap).isEqualTo(MapBuilder.newMap() diff --git a/java-checks/src/main/java/org/sonar/java/checks/AbstractCallToDeprecatedCodeChecker.java b/java-checks/src/main/java/org/sonar/java/checks/AbstractCallToDeprecatedCodeChecker.java index 8d8418f6ce5..3af1e75ed1f 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/AbstractCallToDeprecatedCodeChecker.java +++ b/java-checks/src/main/java/org/sonar/java/checks/AbstractCallToDeprecatedCodeChecker.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; import org.sonar.plugins.java.api.JavaFileScannerContext; import org.sonar.plugins.java.api.semantic.Symbol; @@ -114,7 +113,7 @@ private static List deprecatedMethodSymbols(MethodTree meth return methodSymbol.overriddenSymbols() .stream() .filter(Symbol.MethodSymbol::isDeprecated) - .collect(Collectors.toList()); + .toList(); } abstract void checkOverridingMethod(MethodTree methodTree, List deprecatedSymbol); diff --git a/java-checks/src/main/java/org/sonar/java/checks/AbstractHardCodedCredentialChecker.java b/java-checks/src/main/java/org/sonar/java/checks/AbstractHardCodedCredentialChecker.java index 80b9c4707a5..5a84435bd2c 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/AbstractHardCodedCredentialChecker.java +++ b/java-checks/src/main/java/org/sonar/java/checks/AbstractHardCodedCredentialChecker.java @@ -92,7 +92,7 @@ private List toPatterns(String suffix) { return Stream.of(getCredentialWords().split(",")) .map(String::trim) .map(word -> Pattern.compile("(" + word + ")" + suffix, Pattern.CASE_INSENSITIVE)) - .collect(Collectors.toList()); + .toList(); } protected Optional isSettingCredential(MethodInvocationTree tree) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/AccessibilityChangeOnRecordsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/AccessibilityChangeOnRecordsCheck.java index d355f9e4b8a..4ef63d9f78a 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/AccessibilityChangeOnRecordsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/AccessibilityChangeOnRecordsCheck.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.plugins.java.api.JavaFileScannerContext; import org.sonar.plugins.java.api.semantic.Symbol; @@ -67,7 +66,7 @@ public void leaveNode(Tree tree) { List secondaries = secondaryTargets.getOrDefault(symbol, Collections.emptyList()) .stream() .map(mit -> new JavaFileScannerContext.Location(SECONDARY_MESSAGE, mit)) - .collect(Collectors.toList()); + .toList(); reportIssue(setInvocation, MESSAGE, secondaries, null); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/AssertionsInProductionCodeCheck.java b/java-checks/src/main/java/org/sonar/java/checks/AssertionsInProductionCodeCheck.java index 8d8f8e60f40..9cf2496831b 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/AssertionsInProductionCodeCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/AssertionsInProductionCodeCheck.java @@ -23,7 +23,6 @@ import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.ExpressionsHelper; import org.sonar.java.checks.helpers.UnitTestUtils; @@ -82,7 +81,7 @@ public void leaveFile(JavaFileScannerContext context) { List secondaryLocations = assertions.stream() .skip(1) .map(expr -> new Location("Assertion", expr)) - .collect(Collectors.toList()); + .toList(); reportIssue(primaryLocation, "Remove this assertion from production code.", secondaryLocations, null); } assertions.clear(); diff --git a/java-checks/src/main/java/org/sonar/java/checks/BooleanLiteralCheck.java b/java-checks/src/main/java/org/sonar/java/checks/BooleanLiteralCheck.java index 3e4d124fff7..898e5e716b0 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/BooleanLiteralCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/BooleanLiteralCheck.java @@ -24,7 +24,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.QuickFixHelper; @@ -77,7 +76,7 @@ public void visitNode(Tree tree) { .forRule(this) .onTree(literalList.get(0)) .withMessage("Remove the unnecessary boolean literal%s.", nLiterals > 1 ? "s" : "") - .withSecondaries(literalList.stream().skip(1).map(lit -> new JavaFileScannerContext.Location("", lit)).collect(Collectors.toList())) + .withSecondaries(literalList.stream().skip(1).map(lit -> new JavaFileScannerContext.Location("", lit)).toList()) .withQuickFixes(() -> getQuickFix(tree)) .report(); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/CORSCheck.java b/java-checks/src/main/java/org/sonar/java/checks/CORSCheck.java index c820988e880..34b6afe7a9d 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/CORSCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/CORSCheck.java @@ -23,7 +23,6 @@ import java.util.Arrays; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.ExpressionsHelper; import org.sonarsource.analyzer.commons.collections.SetUtils; @@ -93,7 +92,7 @@ private void checkMethod(Tree tree) { visitor.addAllowedOrigin.forEach(mit -> { List locations = visitor.applyPermit.stream() .map(t -> new Location(MESSAGE, t)) - .collect(Collectors.toList()); + .toList(); reportIssue(mit.methodSelect(), MESSAGE, locations, null); }); } else { diff --git a/java-checks/src/main/java/org/sonar/java/checks/CatchUsesExceptionWithContextCheck.java b/java-checks/src/main/java/org/sonar/java/checks/CatchUsesExceptionWithContextCheck.java index b89c8b55b43..eb76733fd00 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/CatchUsesExceptionWithContextCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/CatchUsesExceptionWithContextCheck.java @@ -348,7 +348,7 @@ private static boolean isSimpleExceptionMessage(ExpressionTree expressionTree) { } private static List getAssignments(List usages) { - return usages.stream().map(UsageStatus::getAssignmentToIdentifier).filter(Objects::nonNull).collect(Collectors.toList()); + return usages.stream().map(UsageStatus::getAssignmentToIdentifier).filter(Objects::nonNull).toList(); } @CheckForNull diff --git a/java-checks/src/main/java/org/sonar/java/checks/CollectionImplementationReferencedCheck.java b/java-checks/src/main/java/org/sonar/java/checks/CollectionImplementationReferencedCheck.java index f9d9b59524a..00d3971245e 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/CollectionImplementationReferencedCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/CollectionImplementationReferencedCheck.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.QuickFixHelper; @@ -253,7 +252,7 @@ public void visitMethod(MethodTree tree) { checkIfAllowed(tree.returnType(), "The return type of this method"); List candidateParameters = tree.parameters().stream() .filter(it -> getSuggestedInterface(it.type()) != null) - .collect(Collectors.toList()); + .toList(); if (candidateParameters.isEmpty()) { return; } diff --git a/java-checks/src/main/java/org/sonar/java/checks/ConfigurationBeanNamesCheck.java b/java-checks/src/main/java/org/sonar/java/checks/ConfigurationBeanNamesCheck.java index fa31bc62d8b..4e8a7b62f4a 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/ConfigurationBeanNamesCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/ConfigurationBeanNamesCheck.java @@ -21,7 +21,6 @@ import java.util.HashSet; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; import org.sonar.plugins.java.api.tree.ClassTree; @@ -61,7 +60,7 @@ private static List getBeanMethods(ClassTree classTree) { .filter(member -> member.is(Tree.Kind.METHOD)) .map(MethodTree.class::cast) .filter(method -> method.symbol().metadata().isAnnotatedWith("org.springframework.context.annotation.Bean")) - .collect(Collectors.toList()); + .toList(); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/DoubleCheckedLockingAssignmentCheck.java b/java-checks/src/main/java/org/sonar/java/checks/DoubleCheckedLockingAssignmentCheck.java index 8ced4cc0843..e94bce55db6 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/DoubleCheckedLockingAssignmentCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/DoubleCheckedLockingAssignmentCheck.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import javax.annotation.CheckForNull; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -147,7 +146,7 @@ public void visitMethod(MethodTree tree) { List locations() { return usages.stream() .map(u -> new JavaFileScannerContext.Location("Usage after assignment", u)) - .collect(Collectors.toList()); + .toList(); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/EmptyMethodsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/EmptyMethodsCheck.java index d113f9429d4..f0f1094f776 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/EmptyMethodsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/EmptyMethodsCheck.java @@ -21,7 +21,6 @@ import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.QuickFixHelper; import org.sonar.java.model.LineUtils; @@ -85,7 +84,7 @@ private void checkConstructors(List members) { List constructors = members.stream() .filter(member -> member.is(Tree.Kind.CONSTRUCTOR)) .map(MethodTree.class::cast) - .collect(Collectors.toList()); + .toList(); if (constructors.size() == 1 && isPublicNoArgConstructor(constructors.get(0))) { // In case that there is only a single public default constructor with empty body, we raise an issue, as this is equivalent to not // defining a constructor at all and hence redundant. diff --git a/java-checks/src/main/java/org/sonar/java/checks/EqualsOverridenWithHashCodeCheck.java b/java-checks/src/main/java/org/sonar/java/checks/EqualsOverridenWithHashCodeCheck.java index 23c3bc77088..5e9035b48eb 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/EqualsOverridenWithHashCodeCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/EqualsOverridenWithHashCodeCheck.java @@ -30,7 +30,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; @Rule(key = "S1206") public class EqualsOverridenWithHashCodeCheck extends IssuableSubscriptionVisitor { @@ -48,7 +47,7 @@ public void visitNode(Tree tree) { List methods = ((ClassTree) tree).members().stream() .filter(member -> member.is(Tree.Kind.METHOD)) .map(MethodTree.class::cast) - .collect(Collectors.toList()); + .toList(); Optional equalsMethod = methods.stream().filter(EqualsOverridenWithHashCodeCheck::isEquals).findAny(); Optional hashCodeMethod = methods.stream().filter(EqualsOverridenWithHashCodeCheck::isHashCode).findAny(); diff --git a/java-checks/src/main/java/org/sonar/java/checks/ForLoopIncrementAndUpdateCheck.java b/java-checks/src/main/java/org/sonar/java/checks/ForLoopIncrementAndUpdateCheck.java index a551b6795c4..04eade80807 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/ForLoopIncrementAndUpdateCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/ForLoopIncrementAndUpdateCheck.java @@ -104,7 +104,7 @@ private static String symbolNames(Set symbols) { private static List getSecondaries(Map updatesInBody) { return updatesInBody.entrySet().stream() .map(entry -> new JavaFileScannerContext.Location(String.format("Move this update of \"%s\".", entry.getKey().name()), entry.getValue())) - .collect(Collectors.toList()); + .toList(); } private static Map updatedOnlyOnceWithUnaryExpression(Map> updatesInBody, StatementTree forStatementBody) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/InstanceofUsedOnExceptionCheck.java b/java-checks/src/main/java/org/sonar/java/checks/InstanceofUsedOnExceptionCheck.java index bd10617e242..d0a8ed84a69 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/InstanceofUsedOnExceptionCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/InstanceofUsedOnExceptionCheck.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -60,7 +59,7 @@ private void reportSimpleInstanceOf(List body, String caughtVaria .map(IfStatementTree.class::cast) .flatMap(InstanceofUsedOnExceptionCheck::getFollowingElseIf) .map(IfStatementTree::condition) - .collect(Collectors.toList()); + .toList(); if (conditions.stream().allMatch(cond -> cond.is(Tree.Kind.INSTANCE_OF) && isLeftOperandAndException((InstanceOfTree) cond, caughtVariable))) { conditions.stream() diff --git a/java-checks/src/main/java/org/sonar/java/checks/InterruptedExceptionCheck.java b/java-checks/src/main/java/org/sonar/java/checks/InterruptedExceptionCheck.java index 42a95190eca..9d1948d68f7 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/InterruptedExceptionCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/InterruptedExceptionCheck.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Optional; import java.util.function.Predicate; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.MethodTreeUtils; @@ -113,7 +112,7 @@ private void reportIfThrowInterruptInBlock(BlockTree blockTree, CatchTree catchT reportIssue(catchTree.parameter(), String.format(MESSAGE, "InterruptedException"), invocationInterrupting.stream() .map(t -> new JavaFileScannerContext.Location("Statement throwing InterruptedException.", t)) - .collect(Collectors.toList()), + .toList(), null); } } @@ -129,7 +128,7 @@ private static List getCaughtTypes(VariableTree parameter) { if (parameter.type().is(Tree.Kind.UNION_TYPE)) { return ((UnionTypeTree) parameter.type()).typeAlternatives().stream() .map(TypeTree::symbolType) - .collect(Collectors.toList()); + .toList(); } return Collections.singletonList(parameter.symbol().type()); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/IterableIteratorCheck.java b/java-checks/src/main/java/org/sonar/java/checks/IterableIteratorCheck.java index b533ebb83fa..093cf3106a0 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/IterableIteratorCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/IterableIteratorCheck.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.model.ExpressionUtils; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -62,7 +61,7 @@ public void visitNode(Tree tree) { if (!returnThis.issueLocations.isEmpty()) { reportIssue(returnThis.issueLocations.get(0), "Refactor this code so that the Iterator supports multiple traversal", returnThis.issueLocations.stream().skip(1) - .map(t -> new JavaFileScannerContext.Location("", t)).collect(Collectors.toList()), + .map(t -> new JavaFileScannerContext.Location("", t)).toList(), null); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/LazyArgEvaluationCheck.java b/java-checks/src/main/java/org/sonar/java/checks/LazyArgEvaluationCheck.java index 4b8534cf4d1..a66de6288a2 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/LazyArgEvaluationCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/LazyArgEvaluationCheck.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.function.Consumer; import java.util.function.Predicate; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.check.Rule; import org.sonar.plugins.java.api.JavaFileScanner; @@ -246,7 +245,7 @@ private void stackAndContinue(T tree, Consumer visit) { private void onMethodInvocationFound(MethodInvocationTree mit) { List flow = findStringArg(mit) .flatMap(LazyArgEvaluationCheck::checkArgument) - .collect(Collectors.toList()); + .toList(); if (!flow.isEmpty()) { context.reportIssue(this, flow.get(0).syntaxNode, flow.get(0).msg, flow.subList(1, flow.size()), null); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/MethodIdenticalImplementationsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/MethodIdenticalImplementationsCheck.java index 32680b91306..38f23e63331 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/MethodIdenticalImplementationsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/MethodIdenticalImplementationsCheck.java @@ -42,7 +42,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; @Rule(key = "S4144") public class MethodIdenticalImplementationsCheck extends IssuableSubscriptionVisitor { @@ -62,7 +61,7 @@ public void visitNode(Tree tree) { .map(MethodTree.class::cast) .filter(methodTree -> isDuplicateCandidate(methodTree, classTree)) .map(MethodWithUsedVariables::new) - .collect(Collectors.toList()); + .toList(); if (methods.size() <= 1) { return; } diff --git a/java-checks/src/main/java/org/sonar/java/checks/MethodParametersOrderCheck.java b/java-checks/src/main/java/org/sonar/java/checks/MethodParametersOrderCheck.java index 78189b85289..87a428974a1 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/MethodParametersOrderCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/MethodParametersOrderCheck.java @@ -28,7 +28,6 @@ import java.util.Locale; import java.util.Map; import java.util.Objects; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.QuickFixHelper; import org.sonar.java.model.ExpressionUtils; @@ -68,13 +67,13 @@ public void visitNode(Tree tree) { return; } ParametersList formalParameterList = parametersByMethod.computeIfAbsent(methodInvTree.methodSymbol(), m -> new ParametersList(methodDeclaration)); - List argumentsList = methodInvTree.arguments().stream().map(this::argumentToIdentifier).collect(Collectors.toList()); + List argumentsList = methodInvTree.arguments().stream().map(this::argumentToIdentifier).toList(); if (matchingNames(formalParameterList, argumentsList)) { List matchingTypesWrongOrder = matchingTypesWrongOrder(formalParameterList, argumentsList); if (!matchingTypesWrongOrder.isEmpty()) { List flow = matchingTypesWrongOrder.stream() .map(param -> new JavaFileScannerContext.Location("Misplaced Parameter", param)) - .collect(Collectors.toList()); + .toList(); QuickFixHelper.newIssue(context) .forRule(this) .onTree(methodInvTree.arguments()) @@ -86,7 +85,7 @@ public void visitNode(Tree tree) { } private static boolean matchingNames(ParametersList formalParameters, List argumentsList) { - List argListNames = argumentsList.stream().filter(Objects::nonNull).map(arg -> arg.name().toLowerCase(Locale.ENGLISH)).collect(Collectors.toList()); + List argListNames = argumentsList.stream().filter(Objects::nonNull).map(arg -> arg.name().toLowerCase(Locale.ENGLISH)).toList(); return allUnique(argListNames) && argListNames.stream().allMatch(formalParameters::hasArgumentWithName); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/MethodWithExcessiveReturnsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/MethodWithExcessiveReturnsCheck.java index c590c70cc77..16113320606 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/MethodWithExcessiveReturnsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/MethodWithExcessiveReturnsCheck.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.check.RuleProperty; import org.sonar.java.checks.helpers.MethodTreeUtils; @@ -99,7 +98,7 @@ private void report(Tree currentTree, Tree reportTree) { String message = String.format(ISSUE_MESSAGE, count, max); List secondaries = returns.stream() .map(token -> new JavaFileScannerContext.Location("return", token)) - .collect(Collectors.toList()); + .toList(); reportIssue(reportTree, message, secondaries, null); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/MissingPathVariableAnnotationCheck.java b/java-checks/src/main/java/org/sonar/java/checks/MissingPathVariableAnnotationCheck.java index 6429523a5e3..a352e5b82f0 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/MissingPathVariableAnnotationCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/MissingPathVariableAnnotationCheck.java @@ -63,7 +63,7 @@ public void visitNode(Tree tree) { List methods = clazzTree.members().stream() .filter(member -> member.is(Tree.Kind.METHOD)) .map(MethodTree.class::cast) - .collect(Collectors.toList()); + .toList(); Set modelAttributePathVariable = methods.stream() .filter(method -> method.symbol().metadata().isAnnotatedWith(MODEL_ATTRIBUTE_ANNOTATION)) diff --git a/java-checks/src/main/java/org/sonar/java/checks/OmitPermittedTypesCheck.java b/java-checks/src/main/java/org/sonar/java/checks/OmitPermittedTypesCheck.java index 72b5e2a039c..b8bb999e7cb 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/OmitPermittedTypesCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/OmitPermittedTypesCheck.java @@ -24,7 +24,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.QuickFixHelper; import org.sonar.java.reporting.JavaQuickFix; @@ -74,7 +73,7 @@ public void leaveFile(JavaFileScannerContext context) { .withMessage(MESSAGE) .withSecondaries(permittedTypes.stream().map(t -> new JavaFileScannerContext.Location("Permitted type", t)) - .collect(Collectors.toList())) + .toList()) .withQuickFix(() -> getQuickFix(permitsKeyword, permittedTypes)) .report(); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/OneDeclarationPerLineCheck.java b/java-checks/src/main/java/org/sonar/java/checks/OneDeclarationPerLineCheck.java index 3b5a658ab15..d1951c093db 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/OneDeclarationPerLineCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/OneDeclarationPerLineCheck.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.QuickFixHelper; import org.sonar.java.model.LineUtils; @@ -96,7 +95,7 @@ private void reportIfIssue(List nodesToReport) { .forRule(this) .onTree(firstLocation) .withMessage("Declare \"%s\"%s on a separate line.", firstLocation.name(), moreThanOneMessage) - .withSecondaries(nodesToReport.stream().skip(1).map(lit -> new JavaFileScannerContext.Location("", lit.simpleName())).collect(Collectors.toList())) + .withSecondaries(nodesToReport.stream().skip(1).map(lit -> new JavaFileScannerContext.Location("", lit.simpleName())).toList()) .withQuickFix(() -> getQuickFixes(nodesToReport)) .report(); diff --git a/java-checks/src/main/java/org/sonar/java/checks/OverwrittenKeyCheck.java b/java-checks/src/main/java/org/sonar/java/checks/OverwrittenKeyCheck.java index 543bf0029c7..688da988b1f 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/OverwrittenKeyCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/OverwrittenKeyCheck.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -102,7 +101,7 @@ private static List secondaryLocations(Collecti return Stream.concat( Stream.of(new JavaFileScannerContext.Location("Original value", firstUse)), rest.stream().map(t -> new JavaFileScannerContext.Location("Same " + key.indexOrKey() + " is set", t))) - .collect(Collectors.toList()); + .toList(); } private static class CollectionAndKey { diff --git a/java-checks/src/main/java/org/sonar/java/checks/PrintfMisuseCheck.java b/java-checks/src/main/java/org/sonar/java/checks/PrintfMisuseCheck.java index d8f9bddc136..cdf3d64061b 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/PrintfMisuseCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/PrintfMisuseCheck.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.check.Rule; import org.sonar.java.model.ExpressionUtils; @@ -72,7 +71,7 @@ public class PrintfMisuseCheck extends AbstractPrintfChecker { private static final MethodMatchers SLF4J_METHOD_MATCHERS = MethodMatchers.or(LEVELS.stream() .map(l -> MethodMatchers.create().ofTypes(ORG_SLF4J_LOGGER).names(l).withAnyParameters().build()) - .collect(Collectors.toList())); + .toList()); @Override protected MethodMatchers getMethodInvocationMatchers() { diff --git a/java-checks/src/main/java/org/sonar/java/checks/PrivateFieldUsedLocallyCheck.java b/java-checks/src/main/java/org/sonar/java/checks/PrivateFieldUsedLocallyCheck.java index e7298130cbc..e865c2bb7de 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/PrivateFieldUsedLocallyCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/PrivateFieldUsedLocallyCheck.java @@ -23,7 +23,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.CheckForNull; import org.sonar.check.Rule; import org.sonar.java.cfg.CFG; @@ -151,7 +150,7 @@ private static List editUsagesWithThis(Symbol symbol) { .map(MemberSelectExpressionTree.class::cast) .filter(memberSelect -> ExpressionUtils.isThis(memberSelect.expression())) .map(memberSelect -> JavaTextEdit.removeBetweenTree(memberSelect.expression(), memberSelect.operatorToken())) - .collect(Collectors.toList()); + .toList(); } private static boolean isLiveInMethodEntry(Symbol privateFieldSymbol, MethodTree methodTree) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/RecordDuplicatedGetterCheck.java b/java-checks/src/main/java/org/sonar/java/checks/RecordDuplicatedGetterCheck.java index f8e182b0575..a8fb6b4fe12 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/RecordDuplicatedGetterCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/RecordDuplicatedGetterCheck.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.model.ExpressionUtils; import org.sonar.java.model.SyntacticEquivalence; @@ -136,7 +135,7 @@ private static List recordComponents(Symbol.TypeSymbol re .stream() .filter(Symbol::isVariableSymbol) .map(Symbol.VariableSymbol.class::cast) - .collect(Collectors.toList()); + .toList(); } private static Optional findDeclaredMethod(Symbol.TypeSymbol recordSymbol, String methodName) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/RecordInsteadOfClassCheck.java b/java-checks/src/main/java/org/sonar/java/checks/RecordInsteadOfClassCheck.java index 41a5c5467c1..e6ce22b3c35 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/RecordInsteadOfClassCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/RecordInsteadOfClassCheck.java @@ -109,7 +109,7 @@ private static List classMethods(Symbol.TypeSymbol classSym .stream() .filter(Symbol::isMethodSymbol) .map(Symbol.MethodSymbol.class::cast) - .collect(Collectors.toList()); + .toList(); } private static List classFields(Symbol.TypeSymbol classSymbol) { @@ -120,7 +120,7 @@ private static List classFields(Symbol.TypeSymbol classSy // records can have constant, so discarding them .filter(s -> !isConstant(s)) .map(Symbol.VariableSymbol.class::cast) - .collect(Collectors.toList()); + .toList(); } private static List classConstructors(List methods) { @@ -128,7 +128,7 @@ private static List classConstructors(List "".equals(m.name())) // only explicit constructors .filter(m -> m.declaration() != null) - .collect(Collectors.toList()); + .toList(); } private static boolean hasOnlyPrivateFinalFields(List fields) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/RedundantRecordMethodsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/RedundantRecordMethodsCheck.java index 019437d387e..5bcc3e7a091 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/RedundantRecordMethodsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/RedundantRecordMethodsCheck.java @@ -116,7 +116,7 @@ public static boolean onlyDoesSimpleAssignments(MethodTree constructor, List parameters = constructor.parameters().stream() .map(parameter -> (Symbol.VariableSymbol) parameter.symbol()) - .collect(Collectors.toList()); + .toList(); List assignments = extractAssignments(constructor.block().body()); Set componentsAssignedInConstructor = new HashSet<>(); for (AssignmentExpressionTree assignment : assignments) { @@ -130,7 +130,7 @@ private static List extractAssignments(List extractAssignment(StatementTree statement) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/SQLInjectionCheck.java b/java-checks/src/main/java/org/sonar/java/checks/SQLInjectionCheck.java index 4433eecbd34..72c89fcfb86 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/SQLInjectionCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/SQLInjectionCheck.java @@ -20,6 +20,7 @@ package org.sonar.java.checks; import java.util.Arrays; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -128,7 +129,7 @@ private static List secondaryLocations(@Nullabl String identifierName) { List secondaryLocations = reassignments.stream() .map(assignment -> new JavaFileScannerContext.Location(String.format("SQL Query is assigned to '%s'", getVariableName(assignment)), assignment.expression())) - .collect(Collectors.toList()); + .collect(Collectors.toCollection(ArrayList::new)); if (initializerOrExpression != null) { secondaryLocations.add(new JavaFileScannerContext.Location(String.format("SQL Query is dynamically formatted and assigned to '%s'", diff --git a/java-checks/src/main/java/org/sonar/java/checks/SelfAssignementCheck.java b/java-checks/src/main/java/org/sonar/java/checks/SelfAssignementCheck.java index 72b41988d32..dcdfeecb75d 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/SelfAssignementCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/SelfAssignementCheck.java @@ -43,7 +43,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import static org.sonar.java.reporting.AnalyzerMessage.textSpanBetween; @@ -99,7 +98,7 @@ private static JavaQuickFix getQuickFix(AssignmentExpressionTree tree) { .filter(m -> m.is(Tree.Kind.VARIABLE)) .map(VariableTree.class::cast) .map(m -> m.simpleName().name()) - .collect(Collectors.toList()); + .toList(); if (memberNames.contains(name)) { return JavaQuickFix.newQuickFix("Disambiguate this self-assignment") diff --git a/java-checks/src/main/java/org/sonar/java/checks/SeveralBreakOrContinuePerLoopCheck.java b/java-checks/src/main/java/org/sonar/java/checks/SeveralBreakOrContinuePerLoopCheck.java index 0d00698ea94..7294dc14be8 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/SeveralBreakOrContinuePerLoopCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/SeveralBreakOrContinuePerLoopCheck.java @@ -19,7 +19,6 @@ */ package org.sonar.java.checks; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.plugins.java.api.JavaFileScanner; import org.sonar.plugins.java.api.JavaFileScannerContext; @@ -135,7 +134,7 @@ private void leaveLoop(Tree primaryLocationTree) { List secondaryLocations = breakAndContinues.stream() .map(t -> new JavaFileScannerContext.Location(String.format("\"%s\" statement.", t.is(Tree.Kind.BREAK_STATEMENT) ? "break" : "continue"), t)) - .collect(Collectors.toList()); + .toList(); context.reportIssue(this, primaryLocationTree, "Reduce the total number of break and continue statements in this loop to use at most one.", diff --git a/java-checks/src/main/java/org/sonar/java/checks/SimpleClassNameCheck.java b/java-checks/src/main/java/org/sonar/java/checks/SimpleClassNameCheck.java index 3ff0e0e3fa2..4e7c02258ce 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/SimpleClassNameCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/SimpleClassNameCheck.java @@ -34,7 +34,6 @@ import java.util.List; import java.util.Objects; import java.util.function.Predicate; -import java.util.stream.Collectors; @Rule(key = "S1942") public class SimpleClassNameCheck extends IssuableSubscriptionVisitor { @@ -51,7 +50,7 @@ public List nodesToVisit() { public void visitNode(Tree tree) { CompilationUnitTree cut = (CompilationUnitTree) tree; cut.types().stream().filter(NOT_EMPTY_STATEMENT).map(t -> ((ClassTree) t).symbol()).forEach(this::checkSymbol); - List imports = cut.imports().stream().filter(NOT_EMPTY_STATEMENT).map(ImportTree.class::cast).collect(Collectors.toList()); + List imports = cut.imports().stream().filter(NOT_EMPTY_STATEMENT).map(ImportTree.class::cast).toList(); boolean fileContainsStarImport = imports.stream() .filter(it -> it.qualifiedIdentifier().is(Kind.MEMBER_SELECT)) .map(it -> ((MemberSelectExpressionTree) it.qualifiedIdentifier()).identifier()) diff --git a/java-checks/src/main/java/org/sonar/java/checks/SpecializedFunctionalInterfacesCheck.java b/java-checks/src/main/java/org/sonar/java/checks/SpecializedFunctionalInterfacesCheck.java index b2cf2f07376..7e8976b9faf 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/SpecializedFunctionalInterfacesCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/SpecializedFunctionalInterfacesCheck.java @@ -64,13 +64,13 @@ private void checkClassInterfaces(ClassTree tree) { .map(typeTree -> matchFunctionalInterface(typeTree.symbolType(), Collections.emptyList()) .map(rs -> new InterfaceTreeAndStringPairReport(rs, typeTree)).orElse(null)) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); if (reportTreeAndStringInterfaces.isEmpty()) { return; } List secondaryLocations = reportTreeAndStringInterfaces.stream() .map(interf -> new JavaFileScannerContext.Location("Replace this interface.", interf.classInterface)) - .collect(Collectors.toList()); + .toList(); reportIssue(tree.simpleName(), reportMessage(reportTreeAndStringInterfaces), secondaryLocations, null); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/StandardCharsetsConstantsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/StandardCharsetsConstantsCheck.java index 52a90b8ea2e..abbdc73cda5 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/StandardCharsetsConstantsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/StandardCharsetsConstantsCheck.java @@ -28,7 +28,6 @@ import java.util.Locale; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.plugins.java.api.JavaVersionAwareVisitor; import org.sonar.java.reporting.JavaTextEdit; @@ -376,7 +375,7 @@ private QuickFixHelper.ImportSupplier getImportSupplier() { private static Optional getCharsetNameArgument(Symbol symbol, Arguments arguments) { List stringArguments = arguments.stream().filter( - argument -> argument.symbolType().is(JAVA_LANG_STRING)).collect(Collectors.toList()); + argument -> argument.symbolType().is(JAVA_LANG_STRING)).toList(); if (stringArguments.isEmpty()) { return Optional.empty(); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/StaticImportCountCheck.java b/java-checks/src/main/java/org/sonar/java/checks/StaticImportCountCheck.java index d600217d59b..e0f41a18150 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/StaticImportCountCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/StaticImportCountCheck.java @@ -19,6 +19,8 @@ */ package org.sonar.java.checks; +import java.util.Collections; +import java.util.List; import org.sonar.check.Rule; import org.sonar.check.RuleProperty; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -28,10 +30,6 @@ import org.sonar.plugins.java.api.tree.ImportTree; import org.sonar.plugins.java.api.tree.Tree; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - @Rule(key = "S3030") public class StaticImportCountCheck extends IssuableSubscriptionVisitor { @@ -50,13 +48,13 @@ public void visitNode(Tree tree) { CompilationUnitTree cut = (CompilationUnitTree) tree; List staticImports = cut.imports().stream() .filter(importClauseTree -> importClauseTree.is(Tree.Kind.IMPORT) && ((ImportTree) importClauseTree).isStatic()) - .collect(Collectors.toList()); + .toList(); int staticImportsCount = staticImports.size(); if (staticImportsCount > threshold) { List flow = staticImports.stream() .map(importStatement -> new JavaFileScannerContext.Location("+1", importStatement)) - .collect(Collectors.toList()); + .toList(); String message = String.format("Reduce the number of \"static\" imports in this class from %d to the maximum allowed %d.", staticImportsCount, threshold); reportIssue(staticImports.get(0), message, flow, null); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/StringLiteralDuplicatedCheck.java b/java-checks/src/main/java/org/sonar/java/checks/StringLiteralDuplicatedCheck.java index 7dd538310a5..93d77956639 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/StringLiteralDuplicatedCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/StringLiteralDuplicatedCheck.java @@ -24,8 +24,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; - import org.sonar.check.Rule; import org.sonar.check.RuleProperty; import org.sonar.java.model.LiteralUtils; @@ -67,7 +65,7 @@ public void scanFile(JavaFileScannerContext context) { int literalOccurrence = literalTrees.size(); if (constants.containsKey(key)) { VariableTree constant = constants.get(key); - List duplications = literalTrees.stream().filter(literal -> literal.parent() != constant).collect(Collectors.toList()); + List duplications = literalTrees.stream().filter(literal -> literal.parent() != constant).toList(); context.reportIssue(this, duplications.iterator().next(), "Use already-defined constant '" + constant.simpleName() + "' instead of duplicating its value here.", secondaryLocations(duplications.subList(1, duplications.size())), literalOccurrence); @@ -85,7 +83,7 @@ public void scanFile(JavaFileScannerContext context) { } private static List secondaryLocations(Collection literalTrees) { - return literalTrees.stream().map(element -> new JavaFileScannerContext.Location("Duplication", element)).collect(Collectors.toList()); + return literalTrees.stream().map(element -> new JavaFileScannerContext.Location("Duplication", element)).toList(); } @Override diff --git a/java-checks/src/main/java/org/sonar/java/checks/SunPackagesUsedCheck.java b/java-checks/src/main/java/org/sonar/java/checks/SunPackagesUsedCheck.java index b8714ee8053..9402cd792c9 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/SunPackagesUsedCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/SunPackagesUsedCheck.java @@ -19,6 +19,8 @@ */ package org.sonar.java.checks; +import java.util.ArrayList; +import java.util.List; import org.sonar.check.Rule; import org.sonar.check.RuleProperty; import org.sonar.java.checks.helpers.ExpressionsHelper; @@ -28,10 +30,6 @@ import org.sonar.plugins.java.api.tree.MemberSelectExpressionTree; import org.sonar.plugins.java.api.tree.Tree; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - @Rule(key = "S1191") public class SunPackagesUsedCheck extends BaseTreeVisitor implements JavaFileScanner { @@ -62,7 +60,7 @@ private void reportIssueWithSecondaries(JavaFileScannerContext context) { List secondaries = reportedTrees.stream() .skip(1) .map(tree -> new JavaFileScannerContext.Location("Replace also this \"Sun\" reference.", tree)) - .collect(Collectors.toList()); + .toList(); int effortToFix = reportedTrees.size(); context.reportIssue(this, reportedTrees.get(0), "Use classes from the Java API instead of Sun classes.", secondaries, effortToFix); diff --git a/java-checks/src/main/java/org/sonar/java/checks/SuppressWarningsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/SuppressWarningsCheck.java index fae70089e0c..6264dc9d41e 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/SuppressWarningsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/SuppressWarningsCheck.java @@ -68,7 +68,7 @@ public void visitNode(Tree tree) { List suppressedWarnings = getSuppressedWarnings(annotationTree.arguments().get(0)); List issues = suppressedWarnings.stream() .filter(currentWarning -> !ruleWarnings.contains(currentWarning)) - .collect(Collectors.toList()); + .toList(); if (!issues.isEmpty()) { StringBuilder sb = new StringBuilder("Suppressing the '").append(String.join(", ", issues)) .append("' warning").append(issues.size() > 1 ? "s" : "").append(" is not allowed"); diff --git a/java-checks/src/main/java/org/sonar/java/checks/SwitchCasesShouldBeCommaSeparatedCheck.java b/java-checks/src/main/java/org/sonar/java/checks/SwitchCasesShouldBeCommaSeparatedCheck.java index 46ebfa7934b..d68ab00b15b 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/SwitchCasesShouldBeCommaSeparatedCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/SwitchCasesShouldBeCommaSeparatedCheck.java @@ -70,7 +70,7 @@ public void visitNode(Tree tree) { .forRule(this) .onTree(lastLabel) .withMessage(MESSAGE) - .withSecondaries(caseLabels.stream().map(label -> new JavaFileScannerContext.Location("", label)).collect(Collectors.toList())) + .withSecondaries(caseLabels.stream().map(label -> new JavaFileScannerContext.Location("", label)).toList()) .report(); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/ThrowsSeveralCheckedExceptionCheck.java b/java-checks/src/main/java/org/sonar/java/checks/ThrowsSeveralCheckedExceptionCheck.java index 1adcae3a267..504cee435ff 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/ThrowsSeveralCheckedExceptionCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/ThrowsSeveralCheckedExceptionCheck.java @@ -21,7 +21,6 @@ import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.MethodTreeUtils; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -61,7 +60,7 @@ private static List getThrownCheckedExceptions(MethodTree methodTree) { return methodTree.symbol().thrownTypes().stream() .filter(type -> !type.isUnknown() && !isSubClassOfRuntimeException(type)) .map(Type::fullyQualifiedName) - .collect(Collectors.toList()); + .toList(); } private static boolean isSubClassOfRuntimeException(Type thrownClass) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/TooManyMethodsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/TooManyMethodsCheck.java index 7003accae48..da42fb2a612 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/TooManyMethodsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/TooManyMethodsCheck.java @@ -21,7 +21,6 @@ import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.check.RuleProperty; import org.sonar.java.checks.helpers.ExpressionsHelper; @@ -61,10 +60,10 @@ public void visitNode(Tree tree) { ClassTree classTree = (ClassTree) tree; List methods = classTree.members() .stream() - .filter(member -> member.is(Tree.Kind.METHOD, Tree.Kind.CONSTRUCTOR)) - .map(MethodTree.class::cast) - .filter(method -> countNonPublic || method.symbol().isPublic()) - .collect(Collectors.toList()); + .filter(member -> member.is(Tree.Kind.METHOD, Tree.Kind.CONSTRUCTOR)) + .map(MethodTree.class::cast) + .filter(method -> countNonPublic || method.symbol().isPublic()) + .toList(); if(shouldNotReportIssue(classTree, methods)) { return; @@ -72,7 +71,7 @@ public void visitNode(Tree tree) { List secondary = methods.stream() .map(method -> new JavaFileScannerContext.Location("Method + 1", method.simpleName())) - .collect(Collectors.toList()); + .toList(); TypeTree reportTree = ExpressionsHelper.reportOnClassTree(classTree); String classType; diff --git a/java-checks/src/main/java/org/sonar/java/checks/UnderscoreMisplacedOnNumberCheck.java b/java-checks/src/main/java/org/sonar/java/checks/UnderscoreMisplacedOnNumberCheck.java index 02025e5fe4d..1c6048f7cca 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/UnderscoreMisplacedOnNumberCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/UnderscoreMisplacedOnNumberCheck.java @@ -29,7 +29,6 @@ import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; @Rule(key = "S3937") public class UnderscoreMisplacedOnNumberCheck extends IssuableSubscriptionVisitor implements JavaVersionAwareVisitor { @@ -67,7 +66,7 @@ private static boolean hasIrregularPattern(String literalValue) { return false; } int firstGroupLength = groups.get(0).length(); - List lengths = groups.stream().skip(1).map(String::length).distinct().collect(Collectors.toList()); + List lengths = groups.stream().skip(1).map(String::length).distinct().toList(); return lengths.size() != 1 || lengths.get(0) < firstGroupLength; } diff --git a/java-checks/src/main/java/org/sonar/java/checks/UnreachableCatchCheck.java b/java-checks/src/main/java/org/sonar/java/checks/UnreachableCatchCheck.java index 4f0c58e19c4..b6b243c7bb3 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/UnreachableCatchCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/UnreachableCatchCheck.java @@ -26,7 +26,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.model.JProblem; import org.sonar.java.model.JWarning; @@ -132,7 +131,7 @@ private static List secondaries(TypeTree type, Map typ targets = ((UnionTypeTree) type).typeAlternatives() .stream() .map(typeByExceptions::get) - .collect(Collectors.toList()); + .toList(); } else { targets = Collections.singletonList(typeByExceptions.get(type)); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/UtilityClassWithPublicConstructorCheck.java b/java-checks/src/main/java/org/sonar/java/checks/UtilityClassWithPublicConstructorCheck.java index 7b40a296224..f5ef0a25a13 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/UtilityClassWithPublicConstructorCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/UtilityClassWithPublicConstructorCheck.java @@ -21,7 +21,6 @@ import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.ClassPatternsUtils; import org.sonar.java.model.ModifiersUtils; @@ -59,11 +58,10 @@ public void visitNode(Tree tree) { } private static List getExplicitConstructors(ClassTree classTree) { - return Collections.unmodifiableList( - classTree.members().stream() + return classTree.members().stream() .filter(UtilityClassWithPublicConstructorCheck::isConstructor) .map(MethodTree.class::cast) - .collect(Collectors.toList())); + .toList(); } private static boolean isConstructor(Tree tree) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/VisibleForTestingUsageCheck.java b/java-checks/src/main/java/org/sonar/java/checks/VisibleForTestingUsageCheck.java index 7818f97241e..20d44464699 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/VisibleForTestingUsageCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/VisibleForTestingUsageCheck.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; import org.sonar.plugins.java.api.JavaFileScannerContext; @@ -55,7 +54,7 @@ public void visitNode(Tree tree) { List locations = symbol.usages().stream() .filter(identifierTree -> !tree.equals(identifierTree)) .map(identifierTree -> new JavaFileScannerContext.Location("usage of @VisibleForTesting in production", identifierTree)) - .collect(Collectors.toList()); + .toList(); reportIssue(identifier, String.format("Remove this usage of \"%s\", it is annotated with @VisibleForTesting and should not be accessed from production code.", identifier.name()), locations, null); diff --git a/java-checks/src/main/java/org/sonar/java/checks/WeakSSLContextCheck.java b/java-checks/src/main/java/org/sonar/java/checks/WeakSSLContextCheck.java index 75904fa80ab..82999769b49 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/WeakSSLContextCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/WeakSSLContextCheck.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; import org.sonar.plugins.java.api.JavaFileScannerContext; @@ -81,12 +80,12 @@ public void visitNode(Tree tree) { } }); } else if (OK_HTTP_TLS_VERSION.matches(mit)) { - List unsecureVersions = getUnsecureVersionsInArguments(arguments); + List unsecureVersions = getUnsecureVersionsInArguments(arguments); if (!unsecureVersions.isEmpty()) { List secondaries = unsecureVersions.stream() .skip(1) .map(secondary -> new JavaFileScannerContext.Location("Other weak protocol.", secondary)) - .collect(Collectors.toList()); + .toList(); reportIssue(unsecureVersions.get(0), "Change this code to use a stronger protocol.", secondaries, null); } } @@ -97,10 +96,10 @@ private boolean isStrongProtocol(String protocol) { return STRONG_PROTOCOLS.contains(protocol) || (javaVersionNotSetOr8OrHigher && STRONG_AFTER_JAVA_8.contains(protocol)); } - private static List getUnsecureVersionsInArguments(Arguments arguments) { + private static List getUnsecureVersionsInArguments(Arguments arguments) { return arguments.stream() .filter(WeakSSLContextCheck::isUnsecureVersion) - .collect(Collectors.toList()); + .toList(); } private static boolean isUnsecureVersion(ExpressionTree expressionTree) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/design/ClassImportCouplingCheck.java b/java-checks/src/main/java/org/sonar/java/checks/design/ClassImportCouplingCheck.java index c80b675d32a..30345107b2e 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/design/ClassImportCouplingCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/design/ClassImportCouplingCheck.java @@ -105,7 +105,7 @@ public void visitClass(ClassTree tree) { private List getSecondaryLocations() { return secondaryLocations.stream() .map(element -> new JavaFileScannerContext.Location("This class contributes to the tight class coupling.", element)) - .collect(Collectors.toList()); + .toList(); } @Override diff --git a/java-checks/src/main/java/org/sonar/java/checks/design/SingletonUsageCheck.java b/java-checks/src/main/java/org/sonar/java/checks/design/SingletonUsageCheck.java index 9aa2441bff5..1b824e19429 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/design/SingletonUsageCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/design/SingletonUsageCheck.java @@ -25,7 +25,6 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.sonar.check.Rule; @@ -65,7 +64,7 @@ public void visitNode(Tree tree) { } private void visitEnum(ClassTree classTree) { - var enumConstants = classTree.members().stream().filter(member -> member.is(Tree.Kind.ENUM_CONSTANT)).collect(Collectors.toList()); + var enumConstants = classTree.members().stream().filter(member -> member.is(Tree.Kind.ENUM_CONSTANT)).toList(); if (enumConstants.size() == 1) { EnumConstantTree constant = (EnumConstantTree) enumConstants.get(0); if (isInitializedWithParameterFreeConstructor(constant) && @@ -87,7 +86,7 @@ private void visitClass(ClassTree classTree) { var allConstructors = singletonClass.members().stream() .filter(member -> member.is(Tree.Kind.CONSTRUCTOR)) .map(MethodTree.class::cast) - .collect(Collectors.toList()); + .toList(); if (allConstructors.size() <= 1 && allConstructors.stream().allMatch(constructor -> constructor.symbol().isPrivate() && constructor.parameters().isEmpty()) && @@ -143,7 +142,7 @@ private static List collectStaticFields(ClassTree classTree, @Null .filter(field -> { Type fieldType = field.symbol().type(); return fieldType.equals(type) || (wrappingType != null && fieldType.equals(wrappingType)); - }).collect(Collectors.toList()); + }).toList(); } private static boolean isEffectivelyFinal(Symbol symbol) { @@ -174,6 +173,6 @@ private static List extractAssignments(VariableTree va .map(Tree::parent) .filter(usage -> usage.is(Tree.Kind.ASSIGNMENT)) .map(AssignmentExpressionTree.class::cast) - .collect(Collectors.toList()); + .toList(); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/helpers/Javadoc.java b/java-checks/src/main/java/org/sonar/java/checks/helpers/Javadoc.java index ad0da7eb0e9..54843f9ecb8 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/helpers/Javadoc.java +++ b/java-checks/src/main/java/org/sonar/java/checks/helpers/Javadoc.java @@ -115,17 +115,17 @@ public Javadoc(Tree tree) { elementParameters = ((MethodTree) tree).parameters().stream() .map(VariableTree::simpleName) .map(IdentifierTree::name) - .collect(Collectors.toList()); + .toList(); elementExceptionNames = ((MethodTree) tree).throwsClauses().stream() .map(Javadoc::exceptionName) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); } else if (tree.is(CLASS_KINDS)) { elementParameters = ((ClassTree) tree).typeParameters().stream() .map(TypeParameterTree::identifier) .map(IdentifierTree::name) .map(name -> "<" + name + ">") - .collect(Collectors.toList()); + .toList(); elementExceptionNames = Collections.emptyList(); } else { elementParameters = Collections.emptyList(); @@ -157,7 +157,7 @@ public Set undocumentedThrownExceptions() { private List computeUndocumentedParameters() { return elementParameters.stream() .filter(name -> isEmptyDescription(blockTagDescriptions.get(BlockTagKey.of(BlockTag.PARAM, name)))) - .collect(Collectors.toList()); + .toList(); } private List computeUndocumentedThrownExceptions() { @@ -171,12 +171,12 @@ private List computeUndocumentedThrownExceptions() { .filter(e -> isEmptyDescription(e.getValue())) .map(Map.Entry::getKey) .map(Javadoc::toSimpleName) - .collect(Collectors.toList()); + .toList(); } return exceptionNames.stream() .map(Javadoc::toSimpleName) .filter(simpleName -> noDescriptionForException(thrownExceptionsMap, simpleName)) - .collect(Collectors.toList()); + .toList(); } private static boolean noDescriptionForException(Map> thrownExceptionsMap, String exceptionSimpleName) { @@ -187,7 +187,7 @@ private static boolean noDescriptionForException(Map> throw .filter(e -> toSimpleName(e.getKey()).equals(exceptionSimpleName)) .map(Map.Entry::getValue) .flatMap(List::stream) - .collect(Collectors.toList()); + .toList(); } return isEmptyDescription(descriptions); } @@ -257,7 +257,7 @@ private static List cleanLines(@Nullable String javadoc) { .replaceAll("(?m)^\\s*\\*", "") .trim() .split("\\r?\\n"); - return Arrays.stream(lines).map(String::trim).collect(Collectors.toList()); + return Arrays.stream(lines).map(String::trim).toList(); } private static String getDescription(List lines, int lineIndex, @Nullable String currentValue) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/regex/AbstractRegexCheck.java b/java-checks/src/main/java/org/sonar/java/checks/regex/AbstractRegexCheck.java index ac0e2b2fcac..c68b996258b 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/regex/AbstractRegexCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/regex/AbstractRegexCheck.java @@ -28,7 +28,6 @@ import java.util.Set; import java.util.function.IntFunction; import java.util.regex.Pattern; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; import org.sonar.java.annotations.VisibleForTesting; @@ -302,7 +301,7 @@ public final void reportIssueFromCommons(RegexSyntaxElement regexTree, String me List secondaries) { reportIssue(regexTree, message, cost, secondaries.stream() .map(RegexCheck.RegexIssueLocation::fromCommonsRegexIssueLocation) - .collect(Collectors.toList())); + .toList()); } public Tree methodOrAnnotationName(ExpressionTree methodInvocationOrAnnotation) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/regex/EmptyLineRegexCheck.java b/java-checks/src/main/java/org/sonar/java/checks/regex/EmptyLineRegexCheck.java index 9d9855eb0c9..43faf9d9dcb 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/regex/EmptyLineRegexCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/regex/EmptyLineRegexCheck.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.Optional; import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.MethodTreeUtils; import org.sonar.java.model.LiteralUtils; @@ -126,7 +125,7 @@ private static List getStringNotTestedForEmpty(MethodInvocationTree mit) { .filter(Optional::isPresent) .map(Optional::get) .filter(EmptyLineRegexCheck::canBeEmpty) - .collect(Collectors.toList()); + .toList(); } else { // Pattern can be used directly return getStringInMatcherFind(mit) @@ -163,7 +162,7 @@ private static boolean isIsEmpty(IdentifierTree id) { private void reportWithSecondaries(Tree regex, List secondaries) { List secondariesLocation = secondaries.stream().map(secondary -> new JavaFileScannerContext.Location("This string can be empty.", secondary)) - .collect(Collectors.toList()); + .toList(); reportIssue(regex, MESSAGE, secondariesLocation, null); } @@ -176,7 +175,7 @@ private static class EmptyLineMultilineVisitor extends RegexBaseVisitor { public void visitSequence(SequenceTree tree) { List items = tree.getItems().stream() .filter(item -> !isNonCapturingWithoutChild(item)) - .collect(Collectors.toList()); + .toList(); if (items.size() == 1 && items.get(0).is(RegexTree.Kind.CAPTURING_GROUP)) { super.visitSequence(tree); diff --git a/java-checks/src/main/java/org/sonar/java/checks/regex/InvalidRegexCheck.java b/java-checks/src/main/java/org/sonar/java/checks/regex/InvalidRegexCheck.java index 5d3efe70eb0..43401c033e2 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/regex/InvalidRegexCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/regex/InvalidRegexCheck.java @@ -20,7 +20,6 @@ package org.sonar.java.checks.regex; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.regex.RegexCheck; import org.sonarsource.analyzer.commons.regex.RegexParseResult; @@ -46,7 +45,7 @@ private void reportSyntaxErrors(List syntaxErrors) { RegexSyntaxElement tree = syntaxErrors.get(0).getOffendingSyntaxElement(); List secondaries = syntaxErrors.stream() .map(error -> new RegexCheck.RegexIssueLocation(error.getOffendingSyntaxElement(), error.getMessage())) - .collect(Collectors.toList()); + .toList(); reportIssue(tree, secondaries); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/regex/RegexStackOverflowCheck.java b/java-checks/src/main/java/org/sonar/java/checks/regex/RegexStackOverflowCheck.java index 0395fd68595..d48ea3b2189 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/regex/RegexStackOverflowCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/regex/RegexStackOverflowCheck.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.check.Rule; import org.sonar.check.RuleProperty; @@ -123,7 +122,7 @@ protected void after(RegexParseResult regexParseResult) { List secondaries = offendingTrees.stream() .skip(1) .map(tree -> new RegexIssueLocation(tree, SECONDARY_MESSAGE)) - .collect(Collectors.toList()); + .toList(); reportIssue(offendingTrees.get(0), MESSAGE, null, secondaries); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/regex/UnicodeAwareCharClassesCheck.java b/java-checks/src/main/java/org/sonar/java/checks/regex/UnicodeAwareCharClassesCheck.java index 7cf680ee4da..feba97322e3 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/regex/UnicodeAwareCharClassesCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/regex/UnicodeAwareCharClassesCheck.java @@ -19,7 +19,6 @@ */ package org.sonar.java.checks.regex; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.regex.RegexCheck; import org.sonar.plugins.java.api.tree.ExpressionTree; @@ -39,7 +38,7 @@ public void checkRegex(RegexParseResult regexForLiterals, ExpressionTree methodI cost, secondaries.stream() .map(RegexCheck.RegexIssueLocation::fromCommonsRegexIssueLocation) - .collect(Collectors.toList())); + .toList()); }).visit(regexForLiterals); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/regex/UnusedGroupNamesCheck.java b/java-checks/src/main/java/org/sonar/java/checks/regex/UnusedGroupNamesCheck.java index 64696a0adad..ead594843f6 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/regex/UnusedGroupNamesCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/regex/UnusedGroupNamesCheck.java @@ -27,7 +27,6 @@ import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.model.ExpressionUtils; import org.sonar.java.regex.RegexCheck; @@ -83,7 +82,7 @@ protected void checkRegex(RegexParseResult regexForLiterals, ExpressionTree meth if (trackedMethodsCalled.isEmpty() && !didEscape && !namedGroups.isEmpty() && !knownGroups.usesBackReferences) { List secondaries = namedGroups.stream() .map(group -> toLocation(group, "Named group '%s'", g -> g.getName().get())) - .collect(Collectors.toList()); + .toList(); reportIssue(namedGroups.get(0), ISSUE_USE_GROUPS_OR_REMOVE, null, secondaries); } for (MethodInvocationTree groupInvocation : trackedMethodsCalled) { @@ -136,7 +135,7 @@ private void checkNoSuchName(KnownGroupsCollector knownGroups, ExpressionTree ar List secondaries = knownGroups.groupsByName.values() .stream() .map(group -> toLocation(group, "Named group '%s'", g -> g.getName().get())) - .collect(Collectors.toList()); + .toList(); reportIssue(arg0, message, null, secondaries); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/security/VerifiedServerHostnamesCheck.java b/java-checks/src/main/java/org/sonar/java/checks/security/VerifiedServerHostnamesCheck.java index 28f637cec85..82cba570189 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/security/VerifiedServerHostnamesCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/security/VerifiedServerHostnamesCheck.java @@ -23,7 +23,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.check.Rule; import org.sonar.java.model.ExpressionUtils; @@ -130,7 +129,7 @@ private void checkBlock(BlockTree blockTree) { List statementTreeList = innerBlock.stream() .filter(statementTree -> !statementTree.is(Tree.Kind.EMPTY_STATEMENT)) - .collect(Collectors.toList()); + .toList(); if (isReturnTrueStatement(statementTreeList)) { reportIssue(statementTreeList.get(0), ISSUE_MESSAGE); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/spring/AutowiredOnConstructorWhenMultipleConstructorsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/spring/AutowiredOnConstructorWhenMultipleConstructorsCheck.java index f53b321935c..7eb287ab8fe 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/spring/AutowiredOnConstructorWhenMultipleConstructorsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/spring/AutowiredOnConstructorWhenMultipleConstructorsCheck.java @@ -20,7 +20,6 @@ package org.sonar.java.checks.spring; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; import org.sonar.plugins.java.api.tree.ClassTree; @@ -56,7 +55,7 @@ public void visitNode(Tree tree) { var constructors = classTree.members().stream() .filter(member -> member.is(Tree.Kind.CONSTRUCTOR)) .map(MethodTree.class::cast) - .collect(Collectors.toList()); + .toList(); if (constructors.size() > 1) { boolean anyHasAutowired = constructors.stream() diff --git a/java-checks/src/main/java/org/sonar/java/checks/spring/AutowiredOnMultipleConstructorsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/spring/AutowiredOnMultipleConstructorsCheck.java index 5f5522e2313..428dd98fd13 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/spring/AutowiredOnMultipleConstructorsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/spring/AutowiredOnMultipleConstructorsCheck.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; import org.sonar.plugins.java.api.semantic.Symbol; @@ -47,7 +46,7 @@ public void visitNode(Tree tree) { List constructors = classTree.members().stream() .filter(m -> m.is(Tree.Kind.CONSTRUCTOR)) .map(m -> (MethodTree) m) - .collect(Collectors.toList()); + .toList(); if (constructors.size() > 1) { boolean isAutowiredAlreadyFound = false; diff --git a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringAntMatcherOrderCheck.java b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringAntMatcherOrderCheck.java index 8865f759fb1..31597222c6d 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringAntMatcherOrderCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringAntMatcherOrderCheck.java @@ -25,7 +25,6 @@ import java.util.Objects; import java.util.Optional; import java.util.regex.Pattern; -import java.util.stream.Collectors; import javax.annotation.CheckForNull; import org.sonar.check.Rule; import org.sonar.java.annotations.VisibleForTesting; @@ -140,7 +139,7 @@ private static List antMatchersPatterns(MethodInvocationTree mit return mit.arguments().stream() .map(StringConstant::of) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); } private static class StringConstant { diff --git a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringBeansShouldBeAccessibleCheck.java b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringBeansShouldBeAccessibleCheck.java index 2e9cdd376f0..469deacbb9c 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringBeansShouldBeAccessibleCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringBeansShouldBeAccessibleCheck.java @@ -31,7 +31,6 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.api.batch.fs.InputFile; @@ -194,7 +193,7 @@ private static List asStringList(Object[] array) { .stream() .filter(String.class::isInstance) .map(String.class::cast) - .collect(Collectors.toList()); + .toList(); } private void addMessageToMap(String classPackageName, IdentifierTree classNameTree) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringComponentWithNonAutowiredMembersCheck.java b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringComponentWithNonAutowiredMembersCheck.java index 9007b7b1723..c325041b760 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringComponentWithNonAutowiredMembersCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringComponentWithNonAutowiredMembersCheck.java @@ -131,7 +131,7 @@ private static List constructors(ClassTree clazzTree) { .map(s -> (Symbol.MethodSymbol) s) .filter(m -> "".equals(m.name())) .filter(m -> m.declaration() != null) - .collect(Collectors.toList()); + .toList(); } private static class IdentifierCollector extends BaseTreeVisitor { diff --git a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringComposedRequestMappingCheck.java b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringComposedRequestMappingCheck.java index 64571a4c65f..1c9cf2275a2 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringComposedRequestMappingCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringComposedRequestMappingCheck.java @@ -23,7 +23,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -64,7 +63,7 @@ public void visitNode(Tree tree) { List methodValues = annotation.arguments().stream() .filter(argument -> "method".equals(attributeName(argument))) .flatMap(SpringComposedRequestMappingCheck::extractValues) - .collect(Collectors.toList()); + .toList(); if (methodValues.size() == 1) { ExpressionTree requestMethod = methodValues.get(0); diff --git a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringConstructorInjectionCheck.java b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringConstructorInjectionCheck.java index 261ffffd88c..87bfaccf4e4 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringConstructorInjectionCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringConstructorInjectionCheck.java @@ -23,7 +23,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -54,7 +53,7 @@ public void visitNode(Tree tree) { .stream() .filter(SpringConstructorInjectionCheck::isMemberAutowired) .map(SpringConstructorInjectionCheck::toReportTree) - .collect(Collectors.toList()); + .toList(); if (!toReport.isEmpty()) { int cost = toReport.size(); diff --git a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringScanDefaultPackageCheck.java b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringScanDefaultPackageCheck.java index e3e75dcaaed..39ddb652897 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/spring/SpringScanDefaultPackageCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/spring/SpringScanDefaultPackageCheck.java @@ -27,7 +27,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -76,7 +75,7 @@ public void visitNode(Tree tree) { List scanPackageAttributeValues = annotation.arguments().stream() .filter(argument -> scanPackageAttributeNames.contains(attributeName(argument))) .flatMap(SpringScanDefaultPackageCheck::extractValues) - .collect(Collectors.toList()); + .toList(); checkAnnotationPackageAttributes(annotation, scanPackageAttributeValues); } diff --git a/java-checks/src/main/java/org/sonar/java/checks/spring/ValueAnnotationShouldInjectPropertyOrSpELCheck.java b/java-checks/src/main/java/org/sonar/java/checks/spring/ValueAnnotationShouldInjectPropertyOrSpELCheck.java index f1f91a3313c..45bad7e49dc 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/spring/ValueAnnotationShouldInjectPropertyOrSpELCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/spring/ValueAnnotationShouldInjectPropertyOrSpELCheck.java @@ -20,7 +20,6 @@ package org.sonar.java.checks.spring; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.ExpressionsHelper; @@ -50,7 +49,7 @@ public void visitNode(Tree tree) { .stream() .filter(m -> m.is(Tree.Kind.VARIABLE)) .flatMap(field -> ((VariableTree) field).modifiers().annotations().stream()) - .collect(Collectors.toList()); + .toList(); List interfaceAnnotations = cls.is(Tree.Kind.ANNOTATION_TYPE) ? cls.modifiers().annotations() : List.of(); diff --git a/java-checks/src/main/java/org/sonar/java/checks/synchronization/DoubleCheckedLockingCheck.java b/java-checks/src/main/java/org/sonar/java/checks/synchronization/DoubleCheckedLockingCheck.java index 9b742fbf47a..2e20d763f94 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/synchronization/DoubleCheckedLockingCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/synchronization/DoubleCheckedLockingCheck.java @@ -43,7 +43,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import java.util.stream.Stream; import static org.sonar.plugins.java.api.tree.Tree.Kind.EQUAL_TO; @@ -126,7 +125,7 @@ private void ifSynchronizedIfPattern(IfFieldEqNull parentIf, IfStatementTree nes private static List createFlow(IfStatementTree parentIf, IfStatementTree nestedIf) { return Stream.of(parentIf.condition(), nestedIf.condition()) .map(c -> new JavaFileScannerContext.Location("Double-checked locking", c)) - .collect(Collectors.toList()); + .toList(); } private boolean insideCriticalSection() { diff --git a/java-checks/src/main/java/org/sonar/java/checks/synchronization/TwoLocksWaitCheck.java b/java-checks/src/main/java/org/sonar/java/checks/synchronization/TwoLocksWaitCheck.java index e5fc8b88d68..49e224db3a7 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/synchronization/TwoLocksWaitCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/synchronization/TwoLocksWaitCheck.java @@ -24,7 +24,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -83,7 +82,7 @@ private static List flowFromTree(Tree tree) { tree.accept(synchronizedKeywordVisitor); return synchronizedKeywordVisitor.stream() .map(t -> new JavaFileScannerContext.Location("locking", t)) - .collect(Collectors.toList()); + .toList(); } private class MethodInvocationVisitor extends BaseTreeVisitor { diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/AbstractJUnit5NotCompliantModifierChecker.java b/java-checks/src/main/java/org/sonar/java/checks/tests/AbstractJUnit5NotCompliantModifierChecker.java index 49017fa7a88..3331120d454 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/AbstractJUnit5NotCompliantModifierChecker.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/AbstractJUnit5NotCompliantModifierChecker.java @@ -19,10 +19,10 @@ */ package org.sonar.java.checks.tests; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; - import org.sonar.java.checks.helpers.QuickFixHelper; import org.sonar.java.checks.helpers.UnitTestUtils; import org.sonar.java.model.ModifiersUtils; @@ -71,12 +71,12 @@ public void visitNode(Tree tree) { List methods = classTree.members().stream() .filter(member -> member.is(Tree.Kind.METHOD)) .map(MethodTree.class::cast) - .collect(Collectors.toList()); + .collect(Collectors.toCollection(ArrayList::new)); List testMethods = methods.stream() .filter(UnitTestUtils::hasJUnit5TestAnnotation) .filter(AbstractJUnit5NotCompliantModifierChecker::isNotOverriding) - .collect(Collectors.toList()); + .toList(); for (MethodTree testMethod : testMethods) { raiseIssueOnNotCompliantModifiers(testMethod.modifiers(), true); diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/AbstractOneExpectedExceptionRule.java b/java-checks/src/main/java/org/sonar/java/checks/tests/AbstractOneExpectedExceptionRule.java index 4f5b592849f..2b1324d1cf7 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/AbstractOneExpectedExceptionRule.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/AbstractOneExpectedExceptionRule.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import org.sonar.java.checks.helpers.MethodTreeUtils; import org.sonar.java.model.ExpressionUtils; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -127,7 +126,7 @@ private void visitMethodInvocation(MethodInvocationTree mit) { private void visitTryStatement(TryStatementTree tryStatementTree) { if (isTryCatchFail(tryStatementTree)) { - List expectedTypes = tryStatementTree.catches().stream().map(c -> c.parameter().type().symbolType()).collect(Collectors.toList()); + List expectedTypes = tryStatementTree.catches().stream().map(c -> c.parameter().type().symbolType()).toList(); reportMultipleCallInTree(expectedTypes, tryStatementTree.block(), tryStatementTree.tryKeyword(), "body of this try/catch"); } } @@ -143,7 +142,7 @@ private void processAssertThrowsArguments(Tree reportLocation, List secondaryLocations(List methodInvocationTrees, String message) { return methodInvocationTrees.stream() .map(expr -> new JavaFileScannerContext.Location(message, expr)) - .collect(Collectors.toList()); + .toList(); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/AssertJAssertionsInConsumerCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/AssertJAssertionsInConsumerCheck.java index a4de235904a..19ec1e9f31f 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/AssertJAssertionsInConsumerCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/AssertJAssertionsInConsumerCheck.java @@ -22,7 +22,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.AbstractAssertionVisitor; @@ -98,7 +97,7 @@ private void checkAssertions(MethodInvocationTree invocation, List argumentsMissingAssertion = argumentsToCheck.stream() .filter(argument -> !hasAssertion(argument)) .map(argument -> new Location("Argument missing assertion", argument)) - .collect(Collectors.toList()); + .toList(); if (!argumentsMissingAssertion.isEmpty()) { IdentifierTree methodName = ExpressionUtils.methodName(invocation); diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/AssertJConsecutiveAssertionCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/AssertJConsecutiveAssertionCheck.java index 84eabcc3a62..1b2b7b1b359 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/AssertJConsecutiveAssertionCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/AssertJConsecutiveAssertionCheck.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.ExpressionsHelper; @@ -146,7 +145,7 @@ private void reportIssueIfMultipleCalls(@Nullable AssertSubject assertSubject, L if (assertSubject != null && !equivalentAssertions.isEmpty()) { reportIssue(assertSubject.methodName(), "Join these multiple assertions subject to one assertion chain.", - equivalentAssertions.stream().map(AssertSubject::toSecondaryLocation).collect(Collectors.toList()), + equivalentAssertions.stream().map(AssertSubject::toSecondaryLocation).toList(), null); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/AssertionsCompletenessCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/AssertionsCompletenessCheck.java index 51b3761975e..29bf4e8ac7b 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/AssertionsCompletenessCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/AssertionsCompletenessCheck.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.Objects; import java.util.regex.Pattern; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.check.Rule; import org.sonar.java.model.ModifiersUtils; @@ -285,18 +284,18 @@ public void visitMethodInvocation(MethodInvocationTree mit) { if (assertThatCalled) { assertThatCalled = false; } else { - List allLocations = Stream.concat(intermediateMethodInvocations.stream(), Stream.of(mit)).collect(Collectors.toList()); + List allLocations = Stream.concat(intermediateMethodInvocations.stream(), Stream.of(mit)).toList(); MethodInvocationTree mainLocation = allLocations.get(0); List secondaries = allLocations.stream() .skip(1L) .map(methodInvocation -> new Location("", methodInvocation.methodSelect())) - .collect(Collectors.toList()); + .toList(); context.reportIssue(AssertionsCompletenessCheck.this, mainLocation, "Add one or more 'assertThat' before 'assertAll'.", secondaries, null); } } else if (ASSERTJ_ASSERT_THAT.matches(mit) && !isJUnitSoftAssertions(mit)) { assertThatCalled = true; } else if (mit.methodSymbol().declaration() != null && intermediateMethodInvocations.stream().noneMatch(invocation -> invocation.methodSymbol().equals(mit.methodSymbol()))) { - List allLocations = Stream.concat(intermediateMethodInvocations.stream(), Stream.of(mit)).collect(Collectors.toList()); + List allLocations = Stream.concat(intermediateMethodInvocations.stream(), Stream.of(mit)).toList(); SoftAssertionsVisitor softAssertionsVisitor = new SoftAssertionsVisitor(assertThatCalled, allLocations); mit.methodSymbol().declaration().accept(softAssertionsVisitor); assertThatCalled = softAssertionsVisitor.assertThatCalled; @@ -317,7 +316,7 @@ public void visitTryStatement(TryStatementTree tree) { } else { List secondaries = intermediateMethodInvocations.stream() .map(methodInvocation -> new Location("", methodInvocation.methodSelect())) - .collect(Collectors.toList()); + .toList(); context.reportIssue(AssertionsCompletenessCheck.this, tree.block().closeBraceToken(), "Add one or more 'assertThat' before the end of this try block.", diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/BooleanOrNullLiteralInAssertionsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/BooleanOrNullLiteralInAssertionsCheck.java index fefff4d6154..959af5f9444 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/BooleanOrNullLiteralInAssertionsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/BooleanOrNullLiteralInAssertionsCheck.java @@ -37,7 +37,6 @@ import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; @Rule(key = "S2701") public class BooleanOrNullLiteralInAssertionsCheck extends AbstractMethodDetection { @@ -196,7 +195,7 @@ private static Optional getBoolOrNullLiteral(ExpressionTree expr) { private void reportDefaultMessage(IdentifierTree methodName, List literals) { List literalLocations = literals.stream() .map(literal -> new JavaFileScannerContext.Location("There does not seem to be a reason to use a literal here.", literal)) - .collect(Collectors.toList()); + .toList(); reportIssue(methodName, DEFAULT_MESSAGE, literalLocations, null); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/JUnit45MethodAnnotationCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/JUnit45MethodAnnotationCheck.java index 09db90d6bda..7f6a1881a04 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/JUnit45MethodAnnotationCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/JUnit45MethodAnnotationCheck.java @@ -26,7 +26,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonarsource.analyzer.commons.collections.MapBuilder; import org.sonar.java.checks.helpers.UnitTestUtils; @@ -67,7 +66,7 @@ public void visitNode(Tree tree) { List methods = classTree.members().stream() .filter(member -> member.is(Tree.Kind.METHOD)) .map(MethodTree.class::cast) - .collect(Collectors.toList()); + .toList(); int jUnitVersion = getJUnitVersion(methods); if (jUnitVersion > 0) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/JUnitCompatibleAnnotationsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/JUnitCompatibleAnnotationsCheck.java index 64f73b9b3c9..35ee0cd3b5a 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/JUnitCompatibleAnnotationsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/JUnitCompatibleAnnotationsCheck.java @@ -30,7 +30,6 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; @Rule(key = "S5967") public class JUnitCompatibleAnnotationsCheck extends IssuableSubscriptionVisitor { @@ -55,7 +54,7 @@ public void visitNode(Tree tree) { List locations = annotationTrees.stream() .filter(annotation -> ANNOTATIONS.contains(annotation.annotationType().symbolType().fullyQualifiedName())) .map(annotationTree -> new JavaFileScannerContext.Location("Incompatible annotation", annotationTree)) - .collect(Collectors.toList()); + .toList(); if (locations.size() > 1) { reportIssue(method.simpleName(), "Remove one of these conflicting annotations.", locations, null); diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/MockingAllMethodsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/MockingAllMethodsCheck.java index f988bbcf305..a8ead1ff8b7 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/MockingAllMethodsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/MockingAllMethodsCheck.java @@ -96,7 +96,7 @@ public void leaveNode(Tree tree) { if (declaredMethods.size() > 1 && mockedMethods.containsAll(declaredMethods)) { List secondaries = mockedMethods.stream() .map(method -> new JavaFileScannerContext.Location("Method mocked here", whenCalls.get(method))) - .collect(Collectors.toList()); + .toList(); reportIssue(declaration, "Refactor this test instead of mocking every non-private member of this class.", secondaries, null); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoAnnotatedObjectsShouldBeInitializedCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoAnnotatedObjectsShouldBeInitializedCheck.java index 547504b91fc..b4422bef4f4 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoAnnotatedObjectsShouldBeInitializedCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoAnnotatedObjectsShouldBeInitializedCheck.java @@ -25,7 +25,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; import org.sonar.plugins.java.api.JavaFileScannerContext; @@ -94,7 +93,7 @@ public void visitNode(Tree tree) { List mocksToInitialize = testClass.members().stream() .filter(MockitoAnnotatedObjectsShouldBeInitializedCheck::isFieldWithTargetAnnotation) .map(VariableTree.class::cast) - .collect(Collectors.toList()); + .toList(); if (!mocksToInitialize.isEmpty() && !mocksAreProperlyInitialized(testClass)) { AnnotationTree firstAnnotation = mocksToInitialize.get(0).modifiers().annotations().get(0); @@ -151,7 +150,7 @@ private static boolean isMockitoJUnitRuleInvoked(ClassTree clazz) { List collected = clazz.members().stream() .filter(member -> member.is(Tree.Kind.VARIABLE)) .map(VariableTree.class::cast) - .collect(Collectors.toList()); + .toList(); for (VariableTree field : collected) { if (field.type().symbolType().is("org.mockito.junit.MockitoRule")) { ExpressionTree initializer = field.initializer(); @@ -204,7 +203,7 @@ private static List getSetupMethods(ClassTree tree) { .filter(member -> member.is(Tree.Kind.METHOD)) .map(MethodTree.class::cast) .filter(MockitoAnnotatedObjectsShouldBeInitializedCheck::isTaggedWithBefore) - .collect(Collectors.toList()); + .toList(); } private static boolean isTaggedWithBefore(MethodTree method) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoArgumentMatchersUsedOnAllParametersCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoArgumentMatchersUsedOnAllParametersCheck.java index d3e1d9c150e..019facb40be 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoArgumentMatchersUsedOnAllParametersCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoArgumentMatchersUsedOnAllParametersCheck.java @@ -23,8 +23,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; - import org.sonar.check.Rule; import org.sonar.java.model.ExpressionUtils; import org.sonar.plugins.java.api.JavaFileScannerContext; @@ -98,7 +96,7 @@ protected void visitArguments(Arguments arguments) { nonMatchers.stream() .skip(1) .map(secondary -> new JavaFileScannerContext.Location("", secondary)) - .collect(Collectors.toList()), + .toList(), null); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoEqSimplificationCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoEqSimplificationCheck.java index d6447525def..8d18968a0d3 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoEqSimplificationCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/MockitoEqSimplificationCheck.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.model.ExpressionUtils; import org.sonar.plugins.java.api.JavaFileScannerContext; @@ -58,7 +57,7 @@ protected void visitArguments(Arguments arguments) { eqs.stream() .skip(1) .map(eq -> new JavaFileScannerContext.Location("", eq.methodSelect())) - .collect(Collectors.toList()), + .toList(), null); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/NoTestInTestClassCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/NoTestInTestClassCheck.java index 6612986365f..c042e078981 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/NoTestInTestClassCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/NoTestInTestClassCheck.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Set; import java.util.regex.Pattern; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; import org.sonar.check.Rule; @@ -90,7 +89,7 @@ private void checkClass(ClassTree classTree) { checkTestNGmembers(simpleName, members); } else { boolean isJunit3TestClass = classSymbol.type().isSubtypeOf("junit.framework.TestCase"); - List membersList = members.collect(Collectors.toList()); + List membersList = members.toList(); if (isJunit3TestClass && containsJUnit3Tests(membersList)) { return; } diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/OneExpectedCheckedExceptionCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/OneExpectedCheckedExceptionCheck.java index bf18bb81d75..34a387050da 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/OneExpectedCheckedExceptionCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/OneExpectedCheckedExceptionCheck.java @@ -20,7 +20,6 @@ package org.sonar.java.checks.tests; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.MethodTreeUtils; import org.sonar.plugins.java.api.semantic.Symbol; @@ -34,7 +33,7 @@ public class OneExpectedCheckedExceptionCheck extends AbstractOneExpectedExcepti void reportMultipleCallInTree(List expectedExceptions, Tree treeToVisit, Tree reportLocation, String placeToRefactor) { List checkedTypes = expectedExceptions.stream() .filter(AbstractOneExpectedExceptionRule::isChecked) - .collect(Collectors.toList()); + .toList(); if (checkedTypes.isEmpty()) { return; diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/OneExpectedRuntimeExceptionCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/OneExpectedRuntimeExceptionCheck.java index 01cc01fa66c..ddf760f7fdb 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/OneExpectedRuntimeExceptionCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/OneExpectedRuntimeExceptionCheck.java @@ -20,7 +20,6 @@ package org.sonar.java.checks.tests; import java.util.List; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.MethodTreeUtils; import org.sonar.plugins.java.api.semantic.MethodMatchers; @@ -43,7 +42,7 @@ public class OneExpectedRuntimeExceptionCheck extends AbstractOneExpectedExcepti void reportMultipleCallInTree(List expectedExceptions, Tree treeToVisit, Tree reportLocation, String placeToRefactor) { List checkedTypes = expectedExceptions.stream() .filter(e -> !isChecked(e)) - .collect(Collectors.toList()); + .toList(); if (checkedTypes.isEmpty()) { return; diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/ParameterizedTestCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/ParameterizedTestCheck.java index 13472c86553..85bac845f07 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/ParameterizedTestCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/ParameterizedTestCheck.java @@ -68,7 +68,7 @@ public void visitNode(Tree tree) { .filter(member -> member.is(Tree.Kind.METHOD)) .map(MethodTree.class::cast) .filter(ParameterizedTestCheck::isParametrizedCandidate) - .collect(Collectors.toList()); + .toList(); if (methods.size() < MIN_SIMILAR_METHODS) { return; } diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/RandomizedTestDataCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/RandomizedTestDataCheck.java index b99a4dd9b5f..539875965c1 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/RandomizedTestDataCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/RandomizedTestDataCheck.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; @@ -102,6 +101,6 @@ private void cleanup() { private static List convertToLocations(Stream trees) { return trees .map(tree -> new JavaFileScannerContext.Location(LOCATIONS_TEXT, tree)) - .collect(Collectors.toList()); + .toList(); } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/tests/TooManyAssertionsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/tests/TooManyAssertionsCheck.java index a91484456a7..f5cebedfbde 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/tests/TooManyAssertionsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/tests/TooManyAssertionsCheck.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import org.sonar.check.Rule; import org.sonar.check.RuleProperty; import org.sonar.java.model.ModifiersUtils; @@ -76,7 +75,7 @@ public void visitNode(Tree tree) { if (assertionsSize > maximum) { List locations = assertionsTree.stream() .map(assertionTree -> new JavaFileScannerContext.Location("Assertion", assertionTree)) - .collect(Collectors.toList()); + .toList(); reportIssue(methodTree.simpleName(), String.format("Refactor this method to reduce the number of assertions from %d to less than %d.", assertionsSize, maximum), diff --git a/java-checks/src/main/java/org/sonar/java/checks/unused/UnusedMethodParameterCheck.java b/java-checks/src/main/java/org/sonar/java/checks/unused/UnusedMethodParameterCheck.java index 798facd0ac0..bacb3b0a75e 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/unused/UnusedMethodParameterCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/unused/UnusedMethodParameterCheck.java @@ -105,7 +105,7 @@ public void visitNode(Tree tree) { // kill the noise regarding unresolved identifiers, and remove the one with matching names from the list of unused unused = unused.stream() .filter(id -> !unresolvedIdentifierNames.contains(id.name())) - .collect(Collectors.toList()); + .toList(); if (!unused.isEmpty()) { reportUnusedParameters(methodTree, unused); } @@ -121,7 +121,7 @@ private void reportUnusedParameters(MethodTree methodTree, List List secondaryLocations = unused.stream() .skip(1) .map(identifier -> new JavaFileScannerContext.Location(String.format(SECONDARY_MESSAGE_FORMAT, identifier.name()), identifier)) - .collect(Collectors.toList()); + .toList(); String parameterNames = unused.stream().map(identifier -> "\"" + identifier.name() + "\"").collect(Collectors.joining(", ")); QuickFixHelper.newIssue(context) .forRule(this) diff --git a/java-checks/src/test/java/org/sonar/java/checks/helpers/JavadocTest.java b/java-checks/src/test/java/org/sonar/java/checks/helpers/JavadocTest.java index 20be023a7ad..1c3ed5d86b0 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/helpers/JavadocTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/helpers/JavadocTest.java @@ -67,7 +67,7 @@ public static void setup() { .filter(name -> name.startsWith("emptyJavadoc")) .map(methods::get) .map(Javadoc::new) - .collect(Collectors.toList()); + .toList(); } @Test diff --git a/java-checks/src/test/java/org/sonar/java/checks/security/ExcessiveContentRequestCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/security/ExcessiveContentRequestCheckTest.java index 16aec902772..6a7d67840fe 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/security/ExcessiveContentRequestCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/security/ExcessiveContentRequestCheckTest.java @@ -19,6 +19,11 @@ */ package org.sonar.java.checks.security; +import java.io.File; +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Map; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -36,13 +41,6 @@ import org.sonar.java.checks.verifier.internal.InternalReadCache; import org.sonar.java.checks.verifier.internal.InternalWriteCache; -import java.io.File; -import java.io.IOException; -import java.security.NoSuchAlgorithmException; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.any; @@ -112,7 +110,7 @@ void no_issue_raised_on_unchanged_files_with_empty_cache() throws IOException, N verify(check, times(3)).leaveFile(any()); assertThat(writeCache.getData()).containsAllEntriesOf(expectedFinalCacheState); - List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).toList(); assertThat(logs). contains( "No cached data for rule java:S5693 on file " + safeSourceFile, @@ -272,7 +270,7 @@ void scanWithoutParsing_returns_false_when_cached_data_is_corrupted() throws IOE verify(check, times(3)).scanWithoutParsing(any()); verify(check, times(3)).leaveFile(any()); - List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).toList(); assertThat(logs).contains( "Cached entry is unreadable for rule java:S5693 on file " + unsafeSourceFile, diff --git a/java-checks/src/test/java/org/sonar/java/checks/spring/SpringBeansShouldBeAccessibleCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/spring/SpringBeansShouldBeAccessibleCheckTest.java index 9c7f9dfa6fd..458eeec4311 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/spring/SpringBeansShouldBeAccessibleCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/spring/SpringBeansShouldBeAccessibleCheckTest.java @@ -25,7 +25,6 @@ import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -150,14 +149,14 @@ void caching() throws NoSuchAlgorithmException, IOException { var unchangedFiles = Stream.of( "app/SpringBootApp1.java", "fourthApp/SpringBootApp4.java" - ).map(path -> mainCodeSourcesPath(BASE_PATH + "springBootApplication/" + path)).collect(Collectors.toList()); + ).map(path -> mainCodeSourcesPath(BASE_PATH + "springBootApplication/" + path)).toList(); var changedFiles = Stream.of( "app/Ok/Ok.java", "fourthApp/controller/Controller.java", "fourthApp/domain/SomeClass.java", "fourthApp/utility/SomeUtilityClass.java", "Ko/Ko.java" - ).map(path -> mainCodeSourcesPath(BASE_PATH + "springBootApplication/" + path)).collect(Collectors.toList()); + ).map(path -> mainCodeSourcesPath(BASE_PATH + "springBootApplication/" + path)).toList(); ReadCache existingReadCache = HashCacheTestHelper.internalReadCacheFromFiles(unchangedFiles); writeCache.bind(existingReadCache); diff --git a/java-frontend/src/main/java/org/sonar/java/JavaFrontend.java b/java-frontend/src/main/java/org/sonar/java/JavaFrontend.java index ab6695931b7..5c3d49f6dbc 100644 --- a/java-frontend/src/main/java/org/sonar/java/JavaFrontend.java +++ b/java-frontend/src/main/java/org/sonar/java/JavaFrontend.java @@ -30,7 +30,6 @@ import java.util.Map; import java.util.Set; import java.util.function.Consumer; -import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; import javax.annotation.Nullable; @@ -101,7 +100,7 @@ public JavaFrontend(JavaVersion javaVersion, @Nullable SonarComponents sonarComp inAndroidContext = sonarComponents.inAndroidContext(); } globalClasspath = Stream.of(classpath, testClasspath, jspClasspath) - .flatMap(Collection::stream).distinct().collect(Collectors.toList()); + .flatMap(Collection::stream).distinct().toList(); //AstScanner for main files astScanner = new JavaAstScanner(sonarComponents); @@ -186,7 +185,7 @@ public void scan(Iterable sourceFiles, Iterable testFiles, private void scanAsBatch(BatchModeContext context, Iterable... inputFiles) { List files = new ArrayList<>(); for (Iterable group : inputFiles) { - files.addAll(astScanner.filterModuleInfo(group).collect(Collectors.toList())); + files.addAll(astScanner.filterModuleInfo(group).toList()); } try { try { diff --git a/java-frontend/src/main/java/org/sonar/java/SonarComponents.java b/java-frontend/src/main/java/org/sonar/java/SonarComponents.java index d3aeab83874..a567a81f665 100644 --- a/java-frontend/src/main/java/org/sonar/java/SonarComponents.java +++ b/java-frontend/src/main/java/org/sonar/java/SonarComponents.java @@ -287,9 +287,9 @@ private void registerCheckClasses(List destinationList, String reposi } List orderedChecks = createdChecks.all().stream() .sorted(Comparator.comparing(check -> classIndexes.getOrDefault(check.getClass(), Integer.MAX_VALUE))) - .collect(Collectors.toList()); + .toList(); destinationList.addAll(orderedChecks); - jspChecks.addAll(orderedChecks.stream().filter(JspCodeVisitor.class::isInstance).collect(Collectors.toList())); + jspChecks.addAll(orderedChecks.stream().filter(JspCodeVisitor.class::isInstance).toList()); } public List mainChecks() { @@ -585,7 +585,7 @@ private static void logParserMessages(Stream>> paths.forEach(path -> problemAndPaths.add(" * " + path)); return problemAndPaths; }) - .collect(Collectors.toList()); + .toList(); if (messagesList.isEmpty()) { return; diff --git a/java-frontend/src/main/java/org/sonar/java/ast/JavaAstScanner.java b/java-frontend/src/main/java/org/sonar/java/ast/JavaAstScanner.java index a0819ed7475..8bb45e31315 100644 --- a/java-frontend/src/main/java/org/sonar/java/ast/JavaAstScanner.java +++ b/java-frontend/src/main/java/org/sonar/java/ast/JavaAstScanner.java @@ -81,7 +81,7 @@ public Map> scanWithoutParsing(Iterable inputFiles) { - List filesNames = filterModuleInfo(inputFiles).collect(Collectors.toList()); + List filesNames = filterModuleInfo(inputFiles).toList(); AnalysisProgress analysisProgress = new AnalysisProgress(filesNames.size()); try { boolean shouldIgnoreUnnamedModuleForSplitPacakge = sonarComponents != null && diff --git a/java-frontend/src/main/java/org/sonar/java/ast/visitors/CognitiveComplexityVisitor.java b/java-frontend/src/main/java/org/sonar/java/ast/visitors/CognitiveComplexityVisitor.java index 262ab9d12c3..e752688cd94 100644 --- a/java-frontend/src/main/java/org/sonar/java/ast/visitors/CognitiveComplexityVisitor.java +++ b/java-frontend/src/main/java/org/sonar/java/ast/visitors/CognitiveComplexityVisitor.java @@ -47,7 +47,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.Stream; import static org.sonar.plugins.java.api.tree.Tree.Kind.CONDITIONAL_AND; @@ -283,7 +282,7 @@ public void visitLambdaExpression(LambdaExpressionTree lambdaExpressionTree) { @Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(CONDITIONAL_AND, CONDITIONAL_OR) && !ignored.contains(tree)) { - List flattenedLogicalExpressions = flattenLogicalExpression(tree).collect(Collectors.toList()); + List flattenedLogicalExpressions = flattenLogicalExpression(tree).toList(); BinaryExpressionTree previous = null; for (BinaryExpressionTree current : flattenedLogicalExpressions) { diff --git a/java-frontend/src/main/java/org/sonar/java/cfg/CFG.java b/java-frontend/src/main/java/org/sonar/java/cfg/CFG.java index dddef3bc86d..6ca035f5fad 100644 --- a/java-frontend/src/main/java/org/sonar/java/cfg/CFG.java +++ b/java-frontend/src/main/java/org/sonar/java/cfg/CFG.java @@ -836,7 +836,7 @@ private void buildSwitch(SwitchTree switchTree, Tree terminator) { .map(CaseGroupTree::labels) .flatMap(List::stream) .map(CaseLabelTree::expressions) - .flatMap(List::stream).collect(Collectors.toList()); + .flatMap(List::stream).toList(); ListUtils.reverse(switchCasesExpressions).forEach(this::build); build(switchTree.expression()); diff --git a/java-frontend/src/main/java/org/sonar/java/classpath/AbstractClasspath.java b/java-frontend/src/main/java/org/sonar/java/classpath/AbstractClasspath.java index f7f009a8a47..e31289bde3c 100644 --- a/java-frontend/src/main/java/org/sonar/java/classpath/AbstractClasspath.java +++ b/java-frontend/src/main/java/org/sonar/java/classpath/AbstractClasspath.java @@ -115,7 +115,7 @@ protected Set getFilesFromProperty(String property) { Set result = new LinkedHashSet<>(); if (settings.hasKey(property)) { List fileNames = Arrays.stream(settings.getStringArray(property)) - .filter(s -> !s.isEmpty()).collect(Collectors.toList()); + .filter(s -> !s.isEmpty()).toList(); File baseDir = fs.baseDir(); boolean hasJavaSources = hasJavaSources(); boolean validateLibs = validateLibraries; diff --git a/java-frontend/src/main/java/org/sonar/java/matcher/MethodMatchersBuilder.java b/java-frontend/src/main/java/org/sonar/java/matcher/MethodMatchersBuilder.java index 6f5bf630c44..a8855598230 100644 --- a/java-frontend/src/main/java/org/sonar/java/matcher/MethodMatchersBuilder.java +++ b/java-frontend/src/main/java/org/sonar/java/matcher/MethodMatchersBuilder.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.function.Function; import java.util.function.Predicate; -import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.sonarsource.analyzer.commons.collections.SetUtils; @@ -142,7 +141,7 @@ public ParametersBuilder name(Predicate namePredicate) { public ParametersBuilder addParametersMatcher(String... parametersType) { return addParametersMatcher(Arrays.stream(parametersType) .>map(parameterType -> substituteAny(type -> type.is(parameterType), parameterType)) - .collect(Collectors.toList())); + .toList()); } private ParametersBuilder addParametersMatcher(List> parametersType) { diff --git a/java-frontend/src/main/java/org/sonar/java/model/DefaultJavaFileScannerContext.java b/java-frontend/src/main/java/org/sonar/java/model/DefaultJavaFileScannerContext.java index 3cfb0a0f74d..d29860648e1 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/DefaultJavaFileScannerContext.java +++ b/java-frontend/src/main/java/org/sonar/java/model/DefaultJavaFileScannerContext.java @@ -24,11 +24,9 @@ import java.util.List; import java.util.Optional; import java.util.function.Function; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.api.batch.fs.InputComponent; import org.sonar.api.batch.fs.InputFile; -import org.sonar.plugins.java.api.internal.EndOfAnalysis; import org.sonar.java.SonarComponents; import org.sonar.java.ast.visitors.ComplexityVisitor; import org.sonar.java.metrics.MetricsComputer; @@ -44,6 +42,7 @@ import org.sonar.plugins.java.api.JavaVersion; import org.sonar.plugins.java.api.SourceMap; import org.sonar.plugins.java.api.caching.CacheContext; +import org.sonar.plugins.java.api.internal.EndOfAnalysis; import org.sonar.plugins.java.api.tree.CompilationUnitTree; import org.sonar.plugins.java.api.tree.LiteralTree; import org.sonar.plugins.java.api.tree.Tree; @@ -145,7 +144,7 @@ public RegexParseResult regexForLiterals(FlagSet initialFlags, LiteralTree... st @Override public void reportIssue(JavaCheck javaCheck, Tree syntaxNode, String message, List secondary, @Nullable Integer cost) { - List> flows = secondary.stream().map(Collections::singletonList).collect(Collectors.toList()); + List> flows = secondary.stream().map(Collections::singletonList).toList(); reportIssueWithFlow(javaCheck, syntaxNode, message, flows, cost); } @@ -165,7 +164,7 @@ public void reportIssue(JavaCheck javaCheck, Tree startTree, Tree endTree, Strin public void reportIssue(JavaCheck javaCheck, Tree startTree, Tree endTree, String message, List secondary, @Nullable Integer cost) { throwIfEndOfAnalysisCheck(javaCheck); - List> flows = secondary.stream().map(Collections::singletonList).collect(Collectors.toList()); + List> flows = secondary.stream().map(Collections::singletonList).toList(); reportIssue(createAnalyzerMessage(inputFile, javaCheck, startTree, endTree, message, flows, cost)); } @@ -210,7 +209,7 @@ private static void completeAnalyzerMessageWithFlows( for (List flow : flows) { List sonarqubeFlow = flow.stream() .map(l -> new AnalyzerMessage(check, component, flowItemLocationProdivder.apply(l), flowItemMessageProvider.apply(l),0)) - .collect(Collectors.toList()); + .toList(); analyzerMessage.flows.add(sonarqubeFlow); } } diff --git a/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java b/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java index 9ca5fcfed90..26a4775429b 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java +++ b/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Set; import java.util.function.Predicate; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; import org.eclipse.jdt.core.dom.ASTUtils; @@ -88,7 +87,7 @@ public List declarationParameters() { if (parameters == null) { MethodTree declaration = declaration(); if (declaration != null && !isCompactConstructor(declaration)) { - parameters = declaration.parameters().stream().map(VariableTree::symbol).collect(Collectors.toList()); + parameters = declaration.parameters().stream().map(VariableTree::symbol).toList(); } else { parameters = new ArrayList<>(); IMethodBinding methodBinding = methodBinding(); diff --git a/java-frontend/src/main/java/org/sonar/java/model/JParser.java b/java-frontend/src/main/java/org/sonar/java/model/JParser.java index d25b3dd79c2..bac68cf7601 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/JParser.java +++ b/java-frontend/src/main/java/org/sonar/java/model/JParser.java @@ -280,7 +280,7 @@ public static JavaTree.CompilationUnitTreeImpl parse(ASTParser astParser, String } static JavaTree.CompilationUnitTreeImpl convert(String version, String unitName, String source, CompilationUnit astNode) { - List errors = Stream.of(astNode.getProblems()).filter(IProblem::isError).collect(Collectors.toList()); + List errors = Stream.of(astNode.getProblems()).filter(IProblem::isError).toList(); Optional possibleSyntaxError = errors.stream().filter(IS_SYNTAX_ERROR).findFirst(); if (possibleSyntaxError.isPresent()) { IProblem syntaxError = possibleSyntaxError.get(); @@ -1557,7 +1557,7 @@ private PatternTree convertPattern(Pattern p) { RecordPattern recordPattern = (RecordPattern) p; List nestedPatterns = recordPattern.patterns().stream() .map(this::convertPattern) - .collect(Collectors.toList()); + .toList(); TypeTree patternType = convertType(recordPattern.getPatternType()); return new RecordPatternTreeImpl(patternType, nestedPatterns); diff --git a/java-frontend/src/main/java/org/sonar/java/model/JParserConfig.java b/java-frontend/src/main/java/org/sonar/java/model/JParserConfig.java index 878885e7a3e..0b2583e34a5 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/JParserConfig.java +++ b/java-frontend/src/main/java/org/sonar/java/model/JParserConfig.java @@ -30,7 +30,6 @@ import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; import java.util.function.BooleanSupplier; -import java.util.stream.Collectors; import java.util.stream.StreamSupport; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.jdt.core.JavaCore; @@ -200,7 +199,7 @@ public void acceptAST(String sourceFilePath, CompilationUnit ast) { List notYetAnalyzedFiles = sourceFilePaths.stream() .filter(file -> !analyzedSourceFilePaths.contains(file)) .map(file -> inputs.get(new File(file))) - .collect(Collectors.toList()); + .toList(); if (!notYetAnalyzedFiles.isEmpty()) { action.accept(notYetAnalyzedFiles.get(0), new Result(e)); @@ -247,7 +246,7 @@ public void parse(Iterable inputFiles, BooleanSupplier isCa ProgressReport progressReport = new ProgressReport("Report about progress of Java AST analyzer", TimeUnit.SECONDS.toMillis(10)); List filesNames = StreamSupport.stream(inputFiles.spliterator(), false) .map(InputFile::toString) - .collect(Collectors.toList()); + .toList(); progressReport.start(filesNames); try { for (InputFile inputFile : inputFiles) { diff --git a/java-frontend/src/main/java/org/sonar/java/model/JavaTree.java b/java-frontend/src/main/java/org/sonar/java/model/JavaTree.java index 0ae9ef9c6fa..5a1332b584a 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/JavaTree.java +++ b/java-frontend/src/main/java/org/sonar/java/model/JavaTree.java @@ -29,7 +29,6 @@ import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.eclipse.jdt.core.dom.IBinding; import org.eclipse.jdt.core.dom.IMethodBinding; @@ -38,7 +37,6 @@ import org.sonar.java.Preconditions; import org.sonar.java.annotations.Beta; import org.sonar.java.ast.parser.QualifiedIdentifierListTreeImpl; -import org.sonarsource.analyzer.commons.collections.ListUtils; import org.sonar.java.model.declaration.AnnotationTreeImpl; import org.sonar.java.model.expression.AssessableExpressionTree; import org.sonar.java.model.expression.TypeArgumentListTreeImpl; @@ -63,6 +61,7 @@ import org.sonar.plugins.java.api.tree.TypeTree; import org.sonar.plugins.java.api.tree.UnionTypeTree; import org.sonar.plugins.java.api.tree.WildcardTree; +import org.sonarsource.analyzer.commons.collections.ListUtils; public abstract class JavaTree implements Tree { @@ -140,7 +139,7 @@ public List getChildren() { if(children == null) { children = children().stream() .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); } return children; } diff --git a/java-frontend/src/main/java/org/sonar/java/model/expression/NewArrayTreeImpl.java b/java-frontend/src/main/java/org/sonar/java/model/expression/NewArrayTreeImpl.java index 02941ca7e1f..08ca453e7ef 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/expression/NewArrayTreeImpl.java +++ b/java-frontend/src/main/java/org/sonar/java/model/expression/NewArrayTreeImpl.java @@ -24,7 +24,6 @@ import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; import org.sonar.plugins.java.api.tree.ArrayDimensionTree; @@ -75,7 +74,7 @@ public NewArrayTreeImpl completeWithCurlyBraces(SyntaxToken openCurlyBraceToken, } public NewArrayTreeImpl completeDimensions(List arrayDimensions) { - this.dimensions = Stream.of(arrayDimensions, dimensions).flatMap(List::stream).collect(Collectors.toList()); + this.dimensions = Stream.of(arrayDimensions, dimensions).flatMap(List::stream).toList(); return this; } diff --git a/java-frontend/src/main/java/org/sonar/java/regex/RegexCheck.java b/java-frontend/src/main/java/org/sonar/java/regex/RegexCheck.java index c2aa17b1de7..77989a3e14e 100644 --- a/java-frontend/src/main/java/org/sonar/java/regex/RegexCheck.java +++ b/java-frontend/src/main/java/org/sonar/java/regex/RegexCheck.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.sonar.java.reporting.AnalyzerMessage; import org.sonar.plugins.java.api.JavaCheck; @@ -77,7 +76,7 @@ public List toSingleLocationItems() { return Stream.concat( Stream.of(new RegexIssueLocation(locations.get(0), message)), locations.stream().skip(1).map(loc -> new RegexIssueLocation(loc, CONTINUATION_MESSAGE))) - .collect(Collectors.toList()); + .toList(); } private static List textSpansFromRegexSyntaxElements(List trees) { diff --git a/java-frontend/src/main/java/org/sonar/java/reporting/InternalJavaIssueBuilder.java b/java-frontend/src/main/java/org/sonar/java/reporting/InternalJavaIssueBuilder.java index 55f42d5c10d..91c8481e1cf 100644 --- a/java-frontend/src/main/java/org/sonar/java/reporting/InternalJavaIssueBuilder.java +++ b/java-frontend/src/main/java/org/sonar/java/reporting/InternalJavaIssueBuilder.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Optional; import java.util.function.Supplier; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -215,7 +214,7 @@ public void report() { if (secondaries != null) { // Transform secondaries into flows: List(size:N) -> List(size:N)>" - flows = secondaries.stream().map(Collections::singletonList).collect(Collectors.toList()); + flows = secondaries.stream().map(Collections::singletonList).toList(); // Keep secondaries and flows mutually exclusive. secondaries = null; } @@ -227,7 +226,7 @@ public void report() { .on(inputFile) .at(range(inputFile, location)) .message(location.msg)) - .collect(Collectors.toList())); + .toList()); } } @@ -243,7 +242,7 @@ private void handleQuickFixes(RuleKey ruleKey, NewIssue newIssue) { } final List flatQuickFixes = quickFixes.stream() .flatMap(s -> s.get().stream()) - .collect(Collectors.toList()); + .toList(); if (flatQuickFixes.isEmpty()) { return; } diff --git a/java-frontend/src/main/java/org/sonar/java/reporting/JavaIssue.java b/java-frontend/src/main/java/org/sonar/java/reporting/JavaIssue.java index 59d44c6e309..1a8176f63f8 100644 --- a/java-frontend/src/main/java/org/sonar/java/reporting/JavaIssue.java +++ b/java-frontend/src/main/java/org/sonar/java/reporting/JavaIssue.java @@ -20,7 +20,6 @@ package org.sonar.java.reporting; import java.util.List; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.api.batch.fs.InputComponent; import org.sonar.api.batch.fs.InputFile; @@ -85,7 +84,7 @@ public JavaIssue addFlow(InputFile file, List> flows) { .on(file) .at(range(file, am.primaryLocation())) .message(am.getMessage())) - .collect(Collectors.toList())); + .toList()); } return this; } diff --git a/java-frontend/src/main/java/org/sonar/java/testing/JavaFileScannerContextForTests.java b/java-frontend/src/main/java/org/sonar/java/testing/JavaFileScannerContextForTests.java index 5fb6a8172ea..17b31e7fc23 100644 --- a/java-frontend/src/main/java/org/sonar/java/testing/JavaFileScannerContextForTests.java +++ b/java-frontend/src/main/java/org/sonar/java/testing/JavaFileScannerContextForTests.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.StreamSupport; import javax.annotation.Nullable; import org.sonar.api.batch.fs.InputFile; @@ -122,7 +121,7 @@ public void reportIssueWithFlow(JavaCheck javaCheck, Tree syntaxNode, String mes .forRule(javaCheck) .onTree(syntaxNode) .withMessage(message) - .withFlows(StreamSupport.stream(flows.spliterator(), false).collect(Collectors.toList())) + .withFlows(StreamSupport.stream(flows.spliterator(), false).toList()) .withCost(cost == null ? 0 : cost) .report(); } diff --git a/java-frontend/src/main/java/org/sonar/java/testing/JavaIssueBuilderForTests.java b/java-frontend/src/main/java/org/sonar/java/testing/JavaIssueBuilderForTests.java index 0d30c38995e..04c13f60728 100644 --- a/java-frontend/src/main/java/org/sonar/java/testing/JavaIssueBuilderForTests.java +++ b/java-frontend/src/main/java/org/sonar/java/testing/JavaIssueBuilderForTests.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.Set; import java.util.function.Supplier; -import java.util.stream.Collectors; import org.sonar.api.batch.fs.InputFile; import org.sonar.java.Preconditions; import org.sonar.java.reporting.AnalyzerMessage; @@ -64,7 +63,7 @@ public void report() { .map(flows -> listOfLocationsToListOfAnalyzerMessages(flows, rule, inputFile)) .ifPresent(issue.flows::addAll); - quickFixes.put(textSpan, quickFixes().stream().map(Supplier::get).flatMap(Collection::stream).collect(Collectors.toList())); + quickFixes.put(textSpan, quickFixes().stream().map(Supplier::get).flatMap(Collection::stream).toList()); issues.add(issue); reported = true; @@ -73,19 +72,19 @@ public void report() { private static List> toSingletonList(List secondaries) { return secondaries.stream() .map(Collections::singletonList) - .collect(Collectors.toList()); + .toList(); } private static List> listOfLocationsToListOfAnalyzerMessages(List> locations, JavaCheck rule, InputFile inputFile) { return locations.stream() .map(listOfLocations -> locationsToAnalyzerMessages(listOfLocations, rule, inputFile)) - .collect(Collectors.toList()); + .toList(); } private static List locationsToAnalyzerMessages(List locations, JavaCheck rule, InputFile inputFile) { return locations.stream() .map(location -> locationToAnalyzerMessage(location, rule, inputFile)) - .collect(Collectors.toList()); + .toList(); } private static AnalyzerMessage locationToAnalyzerMessage(JavaFileScannerContext.Location location, JavaCheck rule, InputFile inputFile) { diff --git a/java-frontend/src/main/java/org/sonar/plugins/java/api/CheckRegistrar.java b/java-frontend/src/main/java/org/sonar/plugins/java/api/CheckRegistrar.java index cc27fd3afc2..fa72094eba8 100644 --- a/java-frontend/src/main/java/org/sonar/plugins/java/api/CheckRegistrar.java +++ b/java-frontend/src/main/java/org/sonar/plugins/java/api/CheckRegistrar.java @@ -21,7 +21,6 @@ import java.util.Collection; import java.util.Collections; -import java.util.stream.Collectors; import java.util.stream.StreamSupport; import javax.annotation.Nullable; import org.apache.commons.lang3.StringUtils; @@ -159,7 +158,7 @@ public void registerAutoScanCompatibleRules(Collection ruleKeys) { private static Collection asCollection(@Nullable Iterable iterable) { return iterable != null ? - StreamSupport.stream(iterable.spliterator(), false).collect(Collectors.toList()) : + StreamSupport.stream(iterable.spliterator(), false).toList() : Collections.emptyList(); } } diff --git a/java-frontend/src/test/java/org/sonar/java/JavaFrontendTest.java b/java-frontend/src/test/java/org/sonar/java/JavaFrontendTest.java index 5d640eea7ac..c29b578c71b 100644 --- a/java-frontend/src/test/java/org/sonar/java/JavaFrontendTest.java +++ b/java-frontend/src/test/java/org/sonar/java/JavaFrontendTest.java @@ -29,9 +29,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.jdt.core.JavaCore; import org.jetbrains.annotations.NotNull; import org.junit.Rule; import org.junit.jupiter.api.Test; @@ -234,7 +232,7 @@ void test_scan_logs_when_caching_is_enabled_and_can_skip_unchanged_files() throw frontend.scan(Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); List logs = logTester.getLogs(Level.INFO).stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(logs) .isNotEmpty() .containsExactly( @@ -270,7 +268,7 @@ void test_scan_logs_when_caching_is_enabled_and_cannot_skip_unchanged_files() th frontend.scan(Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); List logs = logTester.getLogs(Level.INFO).stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(logs) .isNotEmpty() .containsExactly( @@ -306,7 +304,7 @@ void test_scan_logs_when_caching_is_enabled_and_cannot_determine_if_unchanged_fi frontend.scan(Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); List logs = logTester.getLogs(Level.INFO).stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(logs) .isNotEmpty() .containsExactly( @@ -341,7 +339,7 @@ void test_scan_logs_when_caching_is_disabled_and_can_skip_unchanged_files() thro frontend.scan(Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); List logs = logTester.getLogs(Level.INFO).stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(logs) .isNotEmpty() .containsExactly( @@ -376,7 +374,7 @@ void test_scan_logs_when_caching_is_disabled_and_cannot_skip_unchanged_files() t frontend.scan(Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); List logs = logTester.getLogs(Level.INFO).stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(logs) .isNotEmpty() .containsExactly( @@ -404,7 +402,7 @@ void test_scan_logs_when_caching_is_disabled_when_sonar_components_is_null() { frontend.scan(Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); List logs = logTester.getLogs(Level.INFO).stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(logs) .isNotEmpty() .containsExactly( @@ -800,7 +798,7 @@ void sonar_java_ignoreUnnamedModuleForSplitPackage_is_logged_at_debug_level_when scan(settings, SONARQUBE_RUNTIME, "package com.acme; class Anvil {}"); List formattedLogs = logTester.getLogs().stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(formattedLogs).doesNotContain("The Java analyzer will ignore the unnamed module for split packages."); settings.setProperty("sonar.java.ignoreUnnamedModuleForSplitPackage", "true"); @@ -808,7 +806,7 @@ void sonar_java_ignoreUnnamedModuleForSplitPackage_is_logged_at_debug_level_when formattedLogs = logTester.getLogs().stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(formattedLogs).contains("The Java analyzer will ignore the unnamed module for split packages."); } diff --git a/java-frontend/src/test/java/org/sonar/java/MeasurerTester.java b/java-frontend/src/test/java/org/sonar/java/MeasurerTester.java index 4dffc4d917d..b0e31a8ed6a 100644 --- a/java-frontend/src/test/java/org/sonar/java/MeasurerTester.java +++ b/java-frontend/src/test/java/org/sonar/java/MeasurerTester.java @@ -24,7 +24,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import java.util.stream.StreamSupport; import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.BeforeEach; @@ -53,7 +52,7 @@ public void setUp() throws Exception { Measurer measurer = new Measurer(context, mock(NoSonarFilter.class)); JavaFrontend frontend = new JavaFrontend(new JavaVersionImpl(), null, measurer, mock(JavaResourceLocator.class), null, new JavaCheck[0]); - List files = StreamSupport.stream(fs.inputFiles().spliterator(), false).collect(Collectors.toList()); + List files = StreamSupport.stream(fs.inputFiles().spliterator(), false).toList(); frontend.scan(files, Collections.emptyList(), Collections.emptyList()); } diff --git a/java-frontend/src/test/java/org/sonar/java/SonarComponentsTest.java b/java-frontend/src/test/java/org/sonar/java/SonarComponentsTest.java index c2438dc2bec..33da233c3dc 100644 --- a/java-frontend/src/test/java/org/sonar/java/SonarComponentsTest.java +++ b/java-frontend/src/test/java/org/sonar/java/SonarComponentsTest.java @@ -33,7 +33,6 @@ import java.util.List; import java.util.Optional; import java.util.function.LongSupplier; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.CheckForNull; import org.junit.jupiter.api.BeforeEach; @@ -305,7 +304,7 @@ class CheckC implements JavaCheck { null, checkFactory, context.activeRules(), new CheckRegistrar[]{expectedRegistrar}); sonarComponents.setSensorContext(context); sonarComponents.setCheckFilter(checks -> checks.stream() - .filter(c -> !c.getClass().getSimpleName().equals("CheckB")).collect(Collectors.toList())); + .filter(c -> !c.getClass().getSimpleName().equals("CheckB")).toList()); List mainChecks = sonarComponents.mainChecks(); assertThat(mainChecks).extracting(JavaCheck::getClass).extracting(Class::getSimpleName) @@ -638,7 +637,7 @@ void jsp_classpath_should_include_plugin() throws Exception { File plugin = new File("target/classes"); SonarComponents sonarComponents = new SonarComponents(fileLinesContextFactory, fs, javaClasspath, mock(ClasspathForTest.class), checkFactory, context.activeRules()); - List jspClassPath = sonarComponents.getJspClasspath().stream().map(File::getAbsolutePath).collect(Collectors.toList()); + List jspClassPath = sonarComponents.getJspClasspath().stream().map(File::getAbsolutePath).toList(); assertThat(jspClassPath).containsExactly(plugin.getAbsolutePath(), someJar.getAbsolutePath()); } @@ -1100,7 +1099,7 @@ void log_problems_with_list_of_paths_of_files_affected() { List linesInDebugMessage = debugMessage.stream() .map(line -> Arrays.asList(line.split(System.lineSeparator()))) .flatMap(List::stream) - .collect(Collectors.toList()); + .toList(); assertThat(linesInDebugMessage) .containsExactly( @@ -1211,7 +1210,7 @@ interface IncrementalAnalysisSensorContext extends SensorContext { private List ruleKeys(String... repositoryAndKeys) { return Arrays.stream(repositoryAndKeys) .map(RuleKey::parse) - .collect(Collectors.toList()); + .toList(); } private static ActiveRules activeRules(String... repositoryAndKeys) { diff --git a/java-frontend/src/test/java/org/sonar/java/ast/visitors/SonarSymbolTableVisitorTest.java b/java-frontend/src/test/java/org/sonar/java/ast/visitors/SonarSymbolTableVisitorTest.java index 83107986dcb..fcd18e3b41e 100644 --- a/java-frontend/src/test/java/org/sonar/java/ast/visitors/SonarSymbolTableVisitorTest.java +++ b/java-frontend/src/test/java/org/sonar/java/ast/visitors/SonarSymbolTableVisitorTest.java @@ -24,7 +24,6 @@ import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.Collections; -import java.util.stream.Collectors; import org.junit.Rule; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -118,7 +117,7 @@ private void verifyUsages(String componentKey, int line, int offset, TextPointer if(tps.length == 0) { assertThat(textRanges).isEmpty(); } else { - assertThat(textRanges.stream().map(TextRange::start).collect(Collectors.toList())).isNotEmpty().containsOnly(tps); + assertThat(textRanges.stream().map(TextRange::start).toList()).isNotEmpty().containsOnly(tps); } } diff --git a/java-frontend/src/test/java/org/sonar/java/caching/CacheContextImplTest.java b/java-frontend/src/test/java/org/sonar/java/caching/CacheContextImplTest.java index 885219d7ee2..bd3011beecd 100644 --- a/java-frontend/src/test/java/org/sonar/java/caching/CacheContextImplTest.java +++ b/java-frontend/src/test/java/org/sonar/java/caching/CacheContextImplTest.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.slf4j.event.Level; @@ -95,7 +94,7 @@ void of_logs_at_debug_level_when_the_api_is_not_supported() { CacheContextImpl.of(sensorContext); List logs = logTester.getLogs(Level.DEBUG).stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(logs) .hasSize(1) .contains("Missing cache related method from sonar-plugin-api: bim."); diff --git a/java-frontend/src/test/java/org/sonar/java/caching/ContentHashCacheTest.java b/java-frontend/src/test/java/org/sonar/java/caching/ContentHashCacheTest.java index 3b8ef33f525..fac6ba039bb 100644 --- a/java-frontend/src/test/java/org/sonar/java/caching/ContentHashCacheTest.java +++ b/java-frontend/src/test/java/org/sonar/java/caching/ContentHashCacheTest.java @@ -24,7 +24,6 @@ import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.List; -import java.util.stream.Collectors; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -56,7 +55,7 @@ void hasSameHashCached_returns_true_when_content_hash_file_is_in_read_cache() th ContentHashCache contentHashCache = new ContentHashCache(getSensorContextTester()); Assertions.assertTrue(contentHashCache.hasSameHashCached(inputFile)); - List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).toList(); assertThat(logs). contains("Reading cache for the file " + inputFile.key(), "Copying cache from previous for file " + inputFile.key()); @@ -77,7 +76,7 @@ private List hasSameHashCached_returns_false_when_content_hash_file_is_n logTester.setLevel(level); ContentHashCache contentHashCache = new ContentHashCache(getSensorContextTesterWithEmptyCache(true)); Assertions.assertFalse(contentHashCache.hasSameHashCached(inputFile)); - return logTester.getLogs(level).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + return logTester.getLogs(level).stream().map(LogAndArguments::getFormattedMsg).toList(); } @Test @@ -89,7 +88,7 @@ void hasSameHashCached_returns_false_when_cache_is_disabled_and_input_file_statu ContentHashCache contentHashCache = new ContentHashCache(getSensorContextTesterWithEmptyCache(false)); Assertions.assertTrue(contentHashCache.hasSameHashCached(inputFile1)); - List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).toList(); assertThat(logs). contains("Cache is disabled. File status is: " + inputFile1.status() + ". File can be skipped."); } @@ -102,7 +101,7 @@ void hasSameHashCached_returns_false_cache_is_disabled_and_input_file_status_is_ ContentHashCache contentHashCache = new ContentHashCache(getSensorContextTesterWithEmptyCache(false)); Assertions.assertFalse(contentHashCache.hasSameHashCached(inputFile1)); - List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).toList(); assertThat(logs). contains("Cache is disabled. File status is: " + inputFile1.status() + ". File can't be skipped."); } @@ -114,7 +113,7 @@ void hasSameHashCached_writesToCache_when_key_is_not_present() { contentHashCache.hasSameHashCached(inputFile); Assertions.assertTrue(contentHashCache.writeToCache(inputFile)); - List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).toList(); assertThat(logs). contains("Writing to the cache for file " + inputFile.key()); } @@ -133,7 +132,7 @@ void hasSameHashCached_returns_false_when_content_hash_file_is_not_same_as_one_i ContentHashCache contentHashCache = new ContentHashCache(sensorContext); Assertions.assertFalse(contentHashCache.hasSameHashCached(inputFile)); - List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + List logs = logTester.getLogs(Level.TRACE).stream().map(LogAndArguments::getFormattedMsg).toList(); assertThat(logs). contains("Reading cache for the file " + inputFile.key(), "Writing to the cache for file " + inputFile.key()); @@ -158,7 +157,7 @@ void hasSameHashCached_returns_false_when_FileHashingUtils_throws_exception() th ContentHashCache contentHashCache = new ContentHashCache(sensorContext); Assertions.assertFalse(contentHashCache.hasSameHashCached(inputFile1)); - List logs = logTester.getLogs(Level.WARN).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + List logs = logTester.getLogs(Level.WARN).stream().map(LogAndArguments::getFormattedMsg).toList(); assertThat(logs). contains("Failed to compute content hash for file " + inputFile1.key()); } @@ -201,7 +200,7 @@ private List writeToCache_returns_false_when_writing_to_cache_throws_exc FileHashingUtils.inputFileContentHash(file.getPath())); ContentHashCache contentHashCache = new ContentHashCache(sensorContext); Assertions.assertFalse(contentHashCache.writeToCache(inputFile)); - return logTester.getLogs(level).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + return logTester.getLogs(level).stream().map(LogAndArguments::getFormattedMsg).toList(); } @Test @@ -219,7 +218,7 @@ void writeToCache_returns_false_when_FileHashingUtils_throws_exception() throws ContentHashCache contentHashCache = new ContentHashCache(sensorContext); Assertions.assertFalse(contentHashCache.writeToCache(inputFile1)); - List logs = logTester.getLogs(Level.WARN).stream().map(LogAndArguments::getFormattedMsg).collect(Collectors.toList()); + List logs = logTester.getLogs(Level.WARN).stream().map(LogAndArguments::getFormattedMsg).toList(); assertThat(logs). contains("Failed to compute content hash for file " + inputFile1.key()); } diff --git a/java-frontend/src/test/java/org/sonar/java/cfg/CFGDebug.java b/java-frontend/src/test/java/org/sonar/java/cfg/CFGDebug.java index 276046a7764..37125dd4d4e 100644 --- a/java-frontend/src/test/java/org/sonar/java/cfg/CFGDebug.java +++ b/java-frontend/src/test/java/org/sonar/java/cfg/CFGDebug.java @@ -22,7 +22,6 @@ import java.text.MessageFormat; import java.util.Comparator; import java.util.List; -import java.util.stream.Collectors; import org.sonar.java.cfg.CFG.Block; import org.sonar.java.model.SyntaxTreeDebug; import org.sonar.plugins.java.api.tree.Tree; @@ -141,7 +140,7 @@ public static String toString(CFG.Block block) { buffer.append(SyntaxTreeDebug.toString(terminator)); } boolean first = true; - for (Block successor : block.successors().stream().sorted(Comparator.comparingInt(Block::id).reversed()).collect(Collectors.toList())) { + for (Block successor : block.successors().stream().sorted(Comparator.comparingInt(Block::id).reversed()).toList()) { if (first) { first = false; buffer.append('\n'); diff --git a/java-frontend/src/test/java/org/sonar/java/model/DefaultJavaFileScannerContextTest.java b/java-frontend/src/test/java/org/sonar/java/model/DefaultJavaFileScannerContextTest.java index e0b5813829b..631c2abc784 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/DefaultJavaFileScannerContextTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/DefaultJavaFileScannerContextTest.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.sonar.api.batch.sensor.SensorContext; import org.sonar.java.regex.RegexCheck; @@ -210,7 +209,7 @@ void report_issue_on_tree_with_secondary() { assertThat(reportedMessage.flows).hasSize(2); assertMessagePosition(reportedMessage, 3, 6, 3, 7); - List secondaries = reportedMessage.flows.stream().map(flow -> flow.get(0)).collect(Collectors.toList()); + List secondaries = reportedMessage.flows.stream().map(flow -> flow.get(0)).toList(); assertThat(secondaries).hasSize(2); assertMessagePosition(secondaries.get(0), 4, 2, 4, 13); assertMessagePosition(secondaries.get(1), 5, 2, 5, 15); diff --git a/java-frontend/src/test/java/org/sonar/java/model/ExpressionUtilsTest.java b/java-frontend/src/test/java/org/sonar/java/model/ExpressionUtilsTest.java index c0502edbdae..f434759fbb0 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/ExpressionUtilsTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/ExpressionUtilsTest.java @@ -19,6 +19,11 @@ */ package org.sonar.java.model; +import java.io.File; +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Nullable; import org.junit.jupiter.api.Test; import org.sonar.plugins.java.api.semantic.Symbol; import org.sonar.plugins.java.api.tree.AssignmentExpressionTree; @@ -35,13 +40,6 @@ import org.sonar.plugins.java.api.tree.Tree; import org.sonar.plugins.java.api.tree.VariableTree; -import javax.annotation.Nullable; -import java.io.File; -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - import static java.lang.reflect.Modifier.isFinal; import static java.lang.reflect.Modifier.isPrivate; import static org.assertj.core.api.Assertions.assertThat; @@ -193,14 +191,14 @@ void test_invocation_on_same_variable() { .filter(t -> t instanceof VariableTree) .map(VariableTree.class::cast) .map(VariableTree::symbol) - .collect(Collectors.toList()); + .toList(); List invocations = staticInitializer.body().stream() .filter(t -> t instanceof ExpressionStatementTree) .map(ExpressionStatementTree.class::cast) .map(ExpressionStatementTree::expression) .map(MethodInvocationTree.class::cast) - .collect(Collectors.toList()); + .toList(); assertThat(isInvocationOnVariable(invocations.get(0), variablesSymbols.get(0), true)).isTrue(); assertThat(isInvocationOnVariable(invocations.get(0), variablesSymbols.get(1), true)).isFalse(); @@ -243,7 +241,7 @@ void securing_byte() { List expressions = staticInitializer.body().stream() .map(VariableTree.class::cast) .map(VariableTree::initializer) - .collect(Collectors.toList()); + .toList(); assertThat(ExpressionUtils.isSecuringByte(expressions.get(0))).isFalse(); assertThat(ExpressionUtils.isSecuringByte(expressions.get(1))).isTrue(); @@ -258,14 +256,14 @@ private List findAssignmentExpressionTrees(MethodTree .map(ExpressionStatementTree::expression) .filter(e -> e instanceof AssignmentExpressionTree) .map(AssignmentExpressionTree.class::cast) - .collect(Collectors.toList()); + .toList(); } private List findVariableTrees(MethodTree methodTree) { return methodTree.block().body().stream() .filter(s -> s.is(Tree.Kind.VARIABLE)) .map(VariableTree.class::cast) - .collect(Collectors.toList()); + .toList(); } @Test diff --git a/java-frontend/src/test/java/org/sonar/java/model/JParserConfigTest.java b/java-frontend/src/test/java/org/sonar/java/model/JParserConfigTest.java index c18aebca477..f933414a73a 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/JParserConfigTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/JParserConfigTest.java @@ -21,7 +21,6 @@ import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.slf4j.event.Level; @@ -61,7 +60,7 @@ void a_debug_message_is_logged_when_shouldIgnoreUnnamedModuleForSplitPackage_is_ JParserConfig.Mode.BATCH.create(new JavaVersionImpl(17), Collections.emptyList(), true); List logs = logTester.getLogs().stream() .map(LogAndArguments::getFormattedMsg) - .collect(Collectors.toList()); + .toList(); assertThat(logs).containsExactly("The Java analyzer will ignore the unnamed module for split packages."); } } diff --git a/java-frontend/src/test/java/org/sonar/java/model/JSymbolMetadataTest.java b/java-frontend/src/test/java/org/sonar/java/model/JSymbolMetadataTest.java index 3e84d28a231..3c05eb59857 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/JSymbolMetadataTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/JSymbolMetadataTest.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -353,7 +352,7 @@ void assertNullability(Path sourceFile) throws IOException { List idSymbols = collectIdentifiers(cut).stream() .filter(identifier -> identifier.name().startsWith("id")) .map(IdentifierTree::symbol) - .collect(Collectors.toList()); + .toList(); assertThat(idSymbols).isNotEmpty(); for (Symbol symbol : idSymbols) { diff --git a/java-frontend/src/test/java/org/sonar/java/model/LiteralUtilsTest.java b/java-frontend/src/test/java/org/sonar/java/model/LiteralUtilsTest.java index eba7e99f28d..180e3624335 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/LiteralUtilsTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/LiteralUtilsTest.java @@ -23,7 +23,6 @@ import java.lang.reflect.Constructor; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.sonar.plugins.java.api.tree.BinaryExpressionTree; @@ -52,7 +51,7 @@ static void beforeAll() { variables = classTree.members().stream() .filter(member -> member.is(Tree.Kind.VARIABLE)) .map(VariableTree.class::cast) - .collect(Collectors.toList()); + .toList(); } /** diff --git a/java-frontend/src/test/java/org/sonar/java/model/declaration/ClassTreeImplTest.java b/java-frontend/src/test/java/org/sonar/java/model/declaration/ClassTreeImplTest.java index 856d5649a42..c0261eaafab 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/declaration/ClassTreeImplTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/declaration/ClassTreeImplTest.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.sonar.java.model.JParserTestUtils; import org.sonar.java.model.JavaTree; @@ -99,7 +98,7 @@ void records_members_order() { .types().get(0); assertThat(classTree).is(Tree.Kind.RECORD); - List membersKinds = classTree.members().stream().map(Tree::kind).map(Tree.Kind::name).collect(Collectors.toList()); + List membersKinds = classTree.members().stream().map(Tree::kind).map(Tree.Kind::name).toList(); assertThat(membersKinds).containsExactly( "CONSTRUCTOR", "VARIABLE", diff --git a/java-frontend/src/test/java/org/sonar/java/model/expression/AssessableExpressionTreeTest.java b/java-frontend/src/test/java/org/sonar/java/model/expression/AssessableExpressionTreeTest.java index 4af4045f4b3..39bd548e9f9 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/expression/AssessableExpressionTreeTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/expression/AssessableExpressionTreeTest.java @@ -22,7 +22,6 @@ import java.io.File; import java.util.List; import java.util.function.Function; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.sonar.java.model.JParserTestUtils; import org.sonar.plugins.java.api.tree.ClassTree; @@ -133,7 +132,7 @@ private List constantValuesInMethod(String methodName, Function m.arguments().iterator().next()) .map(resolver) - .collect(Collectors.toList()); + .toList(); } } diff --git a/java-frontend/src/test/java/org/sonar/java/model/expression/LambdaExpressionTreeImplTest.java b/java-frontend/src/test/java/org/sonar/java/model/expression/LambdaExpressionTreeImplTest.java index 48fa49e5528..f69de98026b 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/expression/LambdaExpressionTreeImplTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/expression/LambdaExpressionTreeImplTest.java @@ -20,7 +20,6 @@ package org.sonar.java.model.expression; import java.util.List; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -87,14 +86,14 @@ void compute_cfg_with_complexe_cases() { assertThat(cfg).isNotNull(); assertThat(cfg.blocks()).hasSize(4); - List methodInvocations = cfg.blocks() + List methodInvocations = cfg.blocks() .stream() .map(ControlFlowGraph.Block::elements) .flatMap(List::stream) .filter(t -> t.is(Tree.Kind.METHOD_INVOCATION)) .map(MethodInvocationTree.class::cast) .map(MethodInvocationTree::methodSymbol) - .collect(Collectors.toList()); + .toList(); assertThat(methodInvocations) .hasSize(3) diff --git a/java-frontend/src/test/java/org/sonar/java/reporting/InternalJavaIssueBuilderTest.java b/java-frontend/src/test/java/org/sonar/java/reporting/InternalJavaIssueBuilderTest.java index f23b3632f47..2d435a84005 100644 --- a/java-frontend/src/test/java/org/sonar/java/reporting/InternalJavaIssueBuilderTest.java +++ b/java-frontend/src/test/java/org/sonar/java/reporting/InternalJavaIssueBuilderTest.java @@ -28,7 +28,6 @@ import java.util.Map; import java.util.Optional; import java.util.function.Supplier; -import java.util.stream.Collectors; import java.util.stream.StreamSupport; import javax.annotation.Nullable; import org.junit.jupiter.api.BeforeEach; @@ -661,7 +660,7 @@ public NewIssue setRuleDescriptionContextKey(String ruleDescriptionContextKey) { @Override public NewIssue setCodeVariants(@org.jetbrains.annotations.Nullable Iterable iterable) { codeVariants = iterable == null ? null : StreamSupport.stream(iterable.spliterator(), false) - .collect(Collectors.toList()); + .toList(); return this; } diff --git a/java-jsp/src/main/java/org/sonar/java/jsp/Jasper.java b/java-jsp/src/main/java/org/sonar/java/jsp/Jasper.java index 359d2ca7cf6..6107ba90934 100644 --- a/java-jsp/src/main/java/org/sonar/java/jsp/Jasper.java +++ b/java-jsp/src/main/java/org/sonar/java/jsp/Jasper.java @@ -38,7 +38,6 @@ import java.util.Map; import java.util.Optional; import java.util.function.Predicate; -import java.util.stream.Collectors; import java.util.stream.StreamSupport; import javax.servlet.jsp.JspFactory; import org.apache.jasper.JasperException; @@ -134,7 +133,7 @@ static Predicate createExclusionFilter(List sonarExclusions) { } List exclusionsPatterns = sonarExclusions.stream() .map(pattern -> WildcardPattern.create(pattern.trim().replace('\\', '/'), "/")) - .collect(Collectors.toList()); + .toList(); return path -> { String sanitizedPath = PathUtils.sanitize(path); return sanitizedPath == null || exclusionsPatterns.stream().anyMatch(pattern -> pattern.match(sanitizedPath)); @@ -191,7 +190,7 @@ private static Optional findWebInfParentDirectory(FileSystem fs) { private static List jspFiles(FileSystem fs) { Iterable inputFiles = fs.inputFiles(fs.predicates().hasLanguage("jsp")); return StreamSupport.stream(inputFiles.spliterator(), false) - .collect(Collectors.toList()); + .toList(); } private static ClassLoader initClassLoader(List classPath) { diff --git a/java-surefire/src/main/java/org/sonar/plugins/surefire/SurefireJavaParser.java b/java-surefire/src/main/java/org/sonar/plugins/surefire/SurefireJavaParser.java index 2ae25c9c82e..1cde5ddd335 100644 --- a/java-surefire/src/main/java/org/sonar/plugins/surefire/SurefireJavaParser.java +++ b/java-surefire/src/main/java/org/sonar/plugins/surefire/SurefireJavaParser.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.xml.stream.XMLStreamException; import org.apache.commons.lang3.StringUtils; @@ -66,7 +65,7 @@ private static List getReports(List dirs, boolean reportDirSetByUser return dirs.stream() .map(dir -> getReports(dir, reportDirSetByUser)) .flatMap(Arrays::stream) - .collect(Collectors.toList()); + .toList(); } private static File[] getReports(File dir, boolean reportDirSetByUser) { diff --git a/java-surefire/src/main/java/org/sonar/plugins/surefire/api/SurefireUtils.java b/java-surefire/src/main/java/org/sonar/plugins/surefire/api/SurefireUtils.java index 6f03513e9de..b896511e50a 100644 --- a/java-surefire/src/main/java/org/sonar/plugins/surefire/api/SurefireUtils.java +++ b/java-surefire/src/main/java/org/sonar/plugins/surefire/api/SurefireUtils.java @@ -24,7 +24,6 @@ import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; import javax.annotation.CheckForNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,7 +67,7 @@ private static List getReportsDirectoriesFromProperty(Configuration settin .map(String::trim) .map(path -> getFileFromPath(fs, pathResolver, path)) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); } return null; } diff --git a/java-surefire/src/test/java/org/sonar/plugins/surefire/SurefireJavaParserTest.java b/java-surefire/src/test/java/org/sonar/plugins/surefire/SurefireJavaParserTest.java index e1c225b2835..0d79ee6f694 100644 --- a/java-surefire/src/test/java/org/sonar/plugins/surefire/SurefireJavaParserTest.java +++ b/java-surefire/src/test/java/org/sonar/plugins/surefire/SurefireJavaParserTest.java @@ -22,7 +22,6 @@ import java.io.File; import java.net.URISyntaxException; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -200,7 +199,7 @@ void should_log_missing_resource_with_debug_level() throws Exception { private static List getDirs(String... directoryNames) throws URISyntaxException { return Stream.of(directoryNames) .map(directoryName -> new File("src/test/resources/org/sonar/plugins/surefire/api/SurefireParserTest/" + directoryName)) - .collect(Collectors.toList()); + .toList(); } private static SensorContextTester mockContext() { diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/ExplodedGraphWalker.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/ExplodedGraphWalker.java index 96e0918e133..54f5593c537 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/ExplodedGraphWalker.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/ExplodedGraphWalker.java @@ -32,7 +32,6 @@ import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -390,7 +389,7 @@ private Iterable startingStates(MethodTree tree, ProgramState curr stateStream = stateStream.flatMap(ps -> sv.setConstraint(ps, ObjectConstraint.NOT_NULL).stream()); } } - return stateStream.collect(Collectors.toList()); + return stateStream.toList(); } private static List methodOrRecordConstructorParameters(MethodTree methodTree) { @@ -818,7 +817,7 @@ private void executeMethodInvocation(MethodInvocationTree mit) { && methodInvokedBehavior.isComplete() && !EQUALS_METHODS.matches(mit)) { List invocationArguments = invocationArguments(unstack.values); - List invocationTypes = mit.arguments().stream().map(ExpressionTree::symbolType).collect(Collectors.toList()); + List invocationTypes = mit.arguments().stream().map(ExpressionTree::symbolType).toList(); Map thrownExceptionsByExceptionType = new HashMap<>(); @@ -886,7 +885,7 @@ private void enqueueExceptionalPaths(ProgramState ps, Symbol methodSymbol) { private void enqueueExceptionalPaths(ProgramState ps, Symbol methodSymbol, @Nullable MethodYield methodYield) { Set exceptionBlocks = ((CFG.Block) node.programPoint.block).exceptions(); - List catchBlocks = exceptionBlocks.stream().filter(CFG.Block.IS_CATCH_BLOCK).collect(Collectors.toList()); + List catchBlocks = exceptionBlocks.stream().filter(CFG.Block.IS_CATCH_BLOCK).toList(); SymbolicValue peekValue = ps.peekValue(); Preconditions.checkState(peekValue instanceof SymbolicValue.ExceptionalSymbolicValue, "Top of stack should always contains exceptional SV"); @@ -895,7 +894,7 @@ private void enqueueExceptionalPaths(ProgramState ps, Symbol methodSymbol, @Null List caughtBlocks = catchBlocks.stream() .filter(b -> isCaughtByBlock(exceptionSV.exceptionType(), b)) .sorted((b1, b2) -> Integer.compare(b2.id(), b1.id())) - .collect(Collectors.toList()); + .toList(); if (!caughtBlocks.isEmpty()) { caughtBlocks.forEach(b -> enqueue(new ProgramPoint(b), ps, methodYield)); return; @@ -912,7 +911,7 @@ private void enqueueExceptionalPaths(ProgramState ps, Symbol methodSymbol, @Null // use other exceptional blocks, i.e. finally block and exit blocks List otherBlocks = exceptionBlocks.stream() .filter(CFG.Block.IS_CATCH_BLOCK.negate().or(b -> methodSymbol.isUnknown())) - .collect(Collectors.toList()); + .toList(); if (otherBlocks.isEmpty()) { // explicitly add the exception branching to method exit CFG.Block methodExit = node.programPoint.block.successors() diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/FlowComputation.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/FlowComputation.java index 72ecbfd0b29..69e00ea51c6 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/FlowComputation.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/FlowComputation.java @@ -20,6 +20,7 @@ package org.sonar.java.se; import java.util.ArrayDeque; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Deque; @@ -733,7 +734,7 @@ private Set flowFromYields(ExplodedGraph.Edge edge, int maxReturnedFlows) return Collections.emptySet(); } - List argumentIndices = correspondingArgumentIndices(symbolicValues, edge.parent); + List argumentIndices = new ArrayList<>(correspondingArgumentIndices(symbolicValues, edge.parent)); MethodInvocationTree mit = (MethodInvocationTree) edge.parent.programPoint.syntaxTree(); // computes flow messages for arguments being passed to the called method @@ -777,7 +778,8 @@ private List correspondingArgumentIndices(Set candidates List arguments = argumentsUsedForMethodInvocation(invocationNode, mit); return IntStream.range(0, arguments.size()) .filter(i -> candidates.contains(arguments.get(i))) - .boxed().collect(Collectors.toList()); + .boxed() + .toList(); } private List argumentsUsedForMethodInvocation(ExplodedGraph.Node invocationNode, MethodInvocationTree mit) { diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/ProgramState.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/ProgramState.java index 3722e353448..11463cbf293 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/ProgramState.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/ProgramState.java @@ -65,7 +65,7 @@ public static class Pop { public Pop(ProgramState programState, List result) { state = programState; - values = result.stream().map(SymbolicValueSymbol::symbolicValue).collect(Collectors.toList()); + values = result.stream().map(SymbolicValueSymbol::symbolicValue).toList(); valuesAndSymbols = result; } @@ -247,7 +247,7 @@ public SymbolicValue peekValue(int i) { } public List peekValues(int n) { - return peekValuesAndSymbols(n).stream().map(SymbolicValueSymbol::symbolicValue).collect(Collectors.toList()); + return peekValuesAndSymbols(n).stream().map(SymbolicValueSymbol::symbolicValue).toList(); } public List peekValuesAndSymbols(int n) { @@ -297,7 +297,7 @@ public ProgramState addConstraintTransitively(SymbolicValue symbolicValue, Const List transitiveSymbolicValues = knownRelations().stream() .filter(rsv -> rsv.isEquality() && (rsv.getLeftOp() == symbolicValue || rsv.getRightOp() == symbolicValue)) .map(rsv -> rsv.getLeftOp() == symbolicValue ? rsv.getRightOp() : rsv.getLeftOp()) - .collect(Collectors.toList()); + .toList(); ProgramState ps = addConstraint(symbolicValue, constraint); for (SymbolicValue sv : transitiveSymbolicValues) { ps = ps.addConstraint(sv, constraint); diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/ExceptionalYieldChecker.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/ExceptionalYieldChecker.java index 0dfd775f7e5..6ad243fa438 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/ExceptionalYieldChecker.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/ExceptionalYieldChecker.java @@ -19,9 +19,13 @@ */ package org.sonar.java.se.checks; +import java.util.Collection; +import java.util.Collections; import java.util.HashSet; - -import org.sonarsource.analyzer.commons.collections.ListUtils; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; import org.sonar.java.se.ExplodedGraph; import org.sonar.java.se.Flow; import org.sonar.java.se.FlowComputation; @@ -38,14 +42,7 @@ import org.sonar.plugins.java.api.tree.MemberSelectExpressionTree; import org.sonar.plugins.java.api.tree.MethodInvocationTree; import org.sonar.plugins.java.api.tree.Tree; - -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; +import org.sonarsource.analyzer.commons.collections.ListUtils; public class ExceptionalYieldChecker { @@ -137,7 +134,7 @@ private static List> domainsFromArguments(ProgramSta .filter(Objects::nonNull) .flatMap(ConstraintsByDomain::domains) .distinct() - .collect(Collectors.toList()); + .toList(); } private static Flow flowsForArgumentsChangingName(ExceptionalCheckBasedYield exceptionalYield, MethodInvocationTree mit) { diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/MinMaxRangeCheck.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/MinMaxRangeCheck.java index 5b98251a668..42a4d7da311 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/MinMaxRangeCheck.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/MinMaxRangeCheck.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.sonar.check.Rule; @@ -191,7 +190,7 @@ private ProgramState handleMinMaxInvocation(CheckerContext context, MethodInvoca ProgramState psBeforeInvocation = context.getNode().programState; List args = psBeforeInvocation.peekValues(2); - List constraintsByArgs = args.stream().map(programState::getConstraints).collect(Collectors.toList()); + List constraintsByArgs = args.stream().map(programState::getConstraints).toList(); checkRangeInconsistencies(context, syntaxNode, constraintsByArgs); diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/XxeProcessingCheck.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/XxeProcessingCheck.java index 9d6ba1844d2..fe3e03c3404 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/XxeProcessingCheck.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/checks/XxeProcessingCheck.java @@ -25,7 +25,6 @@ import java.util.Objects; import java.util.Optional; import java.util.function.Predicate; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; import org.sonar.check.Rule; @@ -244,7 +243,7 @@ private static boolean documentBuilderFactoryIsSecured(@Nullable ConstraintsByDo MethodMatchers.create().ofSubTypes(SAX_READER).names("read").withAnyParameters().build() ); - private static final List PROPERTIES_TO_CHECK = Arrays.asList( + private static final List PROPERTIES_TO_CHECK = Stream.of( FeatureSupportDtd.values(), FeatureIsSupportingExternalEntities.values(), FeatureDisallowDoctypeDecl.values(), @@ -255,9 +254,8 @@ private static boolean documentBuilderFactoryIsSecured(@Nullable ConstraintsByDo AttributeDTD.values(), AttributeSchema.values(), AttributeStyleSheet.values()) - .stream() .flatMap(Stream::of) - .collect(Collectors.toList()); + .toList(); private static final List> FLOW_CONSTRAINT_DOMAIN = Arrays.asList( AttributeDTD.class, diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/symbolicvalues/RelationalSymbolicValue.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/symbolicvalues/RelationalSymbolicValue.java index 09577928743..860fe76c426 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/symbolicvalues/RelationalSymbolicValue.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/symbolicvalues/RelationalSymbolicValue.java @@ -20,10 +20,17 @@ package org.sonar.java.se.symbolicvalues; import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Deque; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.stream.Stream; -import org.sonar.java.annotations.VisibleForTesting; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; import org.sonar.java.Preconditions; - +import org.sonar.java.annotations.VisibleForTesting; import org.sonar.java.se.ProgramState; import org.sonar.java.se.constraint.BooleanConstraint; import org.sonar.java.se.constraint.Constraint; @@ -31,17 +38,6 @@ import org.sonar.java.se.constraint.ObjectConstraint; import org.sonar.plugins.java.api.semantic.Symbol; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - import static org.sonar.java.se.symbolicvalues.RelationalSymbolicValue.Kind.EQUAL; import static org.sonar.java.se.symbolicvalues.RelationalSymbolicValue.Kind.GREATER_THAN_OR_EQUAL; import static org.sonar.java.se.symbolicvalues.RelationalSymbolicValue.Kind.LESS_THAN; @@ -202,8 +198,8 @@ private static List getProgramStatesWithNullConstraints(List nullConstraints = copiedConstraints.stream() .flatMap(ps -> operand.setConstraint(ps, ObjectConstraint.NULL).stream()) .map(ps -> ps.removeConstraintsOnDomain(operand, BooleanConstraint.class)) - .collect(Collectors.toList()); - return Stream.of(copiedConstraints, nullConstraints).flatMap(List::stream).collect(Collectors.toList()); + .toList(); + return Stream.of(copiedConstraints, nullConstraints).flatMap(List::stream).toList(); } private List copyConstraintFromTo(SymbolicValue from, SymbolicValue to, ProgramState programState, Set knownRelations) { diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/BehaviorCache.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/BehaviorCache.java index 3c00e6832bb..255a55e4280 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/BehaviorCache.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/BehaviorCache.java @@ -32,7 +32,6 @@ import java.util.List; import java.util.Map; import java.util.function.Supplier; -import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.slf4j.Logger; @@ -159,7 +158,7 @@ private static Map loadHardcodedBehaviors() { return loadHardcodedBehaviors( () -> Arrays.stream(BEHAVIORS_RESOURCES) .map(BehaviorCache.class::getResourceAsStream) - .collect(Collectors.toList())); + .toList()); } @VisibleForTesting diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/ExceptionalCheckBasedYield.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/ExceptionalCheckBasedYield.java index ec79b7d0c0a..351b97447af 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/ExceptionalCheckBasedYield.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/ExceptionalCheckBasedYield.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.Set; import java.util.function.Supplier; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; @@ -156,7 +155,7 @@ public Set flow(List parameterIndices, List exceptionFlows(int maxReturnedFlows) { - List> domains = node.programState.getConstraints(svCausingException).domains().collect(Collectors.toList()); + List> domains = node.programState.getConstraints(svCausingException).domains().toList(); return FlowComputation.flow(node, svCausingException, domains, maxReturnedFlows); } diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/ExceptionalYield.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/ExceptionalYield.java index 10303ca2099..6d52b5f455e 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/ExceptionalYield.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/ExceptionalYield.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.function.Supplier; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; import org.apache.commons.lang3.builder.EqualsBuilder; @@ -77,7 +76,7 @@ public Type exceptionType(Sema semanticModel) { @Override public String toString() { return String.format("{params: %s, exceptional%s}", - parametersConstraints.stream().map(constraints -> constraints.stream().map(Constraint::toString).collect(Collectors.toList())).collect(Collectors.toList()), + parametersConstraints.stream().map(constraints -> constraints.stream().map(Constraint::toString).toList()).toList(), exceptionType == null ? "" : (" (" + exceptionType + ")")); } diff --git a/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/HappyPathYield.java b/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/HappyPathYield.java index 764e8fff7cd..a6c3b8f9652 100644 --- a/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/HappyPathYield.java +++ b/java-symbolic-execution/src/main/java/org/sonar/java/se/xproc/HappyPathYield.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.function.Supplier; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -93,7 +92,7 @@ public int resultIndex() { @Override public String toString() { return String.format("{params: %s, result: %s (%d)}", - parametersConstraints.stream().map(constraints -> constraints.stream().map(Constraint::toString).collect(Collectors.toList())).collect(Collectors.toList()), + parametersConstraints.stream().map(constraints -> constraints.stream().map(Constraint::toString).toList()).toList(), resultConstraint, resultIndex); } diff --git a/java-symbolic-execution/src/test/java/org/sonar/java/se/ExplodedGraphWalkerTest.java b/java-symbolic-execution/src/test/java/org/sonar/java/se/ExplodedGraphWalkerTest.java index d6e02744b4f..935c1052a96 100644 --- a/java-symbolic-execution/src/test/java/org/sonar/java/se/ExplodedGraphWalkerTest.java +++ b/java-symbolic-execution/src/test/java/org/sonar/java/se/ExplodedGraphWalkerTest.java @@ -26,7 +26,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.sonar.java.cfg.CFG; @@ -698,7 +697,7 @@ void eg_walker_factory_default_checks() throws IOException { XmlParserLoadsExternalSchemasCheck.class, XmlValidatedSignatureCheck.class) .map(Class::getSimpleName) - .collect(Collectors.toList()); + .toList(); // Compute the list of SEChecks defined in package List seChecks = ClassPath.from(ExplodedGraphWalkerTest.class.getClassLoader()) .getTopLevelClasses("org.sonar.java.se.checks") @@ -707,10 +706,10 @@ void eg_walker_factory_default_checks() throws IOException { .filter(name -> name.endsWith("Check") && !name.equals(SECheck.class.getSimpleName())) .filter(name -> !nonDefaultChecks.contains(name)) .sorted() - .collect(Collectors.toList()); + .toList(); ExplodedGraphWalker.ExplodedGraphWalkerFactory factory = new ExplodedGraphWalker.ExplodedGraphWalkerFactory(new ArrayList<>()); - assertThat(factory.seChecks.stream().map(c -> c.getClass().getSimpleName()).sorted().collect(Collectors.toList())).isEqualTo(seChecks); + assertThat(factory.seChecks.stream().map(c -> c.getClass().getSimpleName()).sorted().toList()).isEqualTo(seChecks); } @Test @@ -750,12 +749,12 @@ void test_enqueueing_of_catch_blocks() { MethodBehavior mb = sev.behaviorCache.behaviors .get("org.sonar.java.resolve.targets.se.ExceptionEnqueue#testCatchBlockEnqueue(Lorg/sonar/java/resolve/targets/se/ExceptionEnqueue;)Z"); - List happyPathYields = mb.happyPathYields().collect(Collectors.toList()); + List happyPathYields = mb.happyPathYields().toList(); assertThat(happyPathYields).hasSize(1); assertThat(happyPathYields.get(0).resultConstraint()).isNull(); mb = sev.behaviorCache.behaviors.get("org.sonar.java.resolve.targets.se.ExceptionEnqueue#testCatchBlockEnqueue2()Z"); - happyPathYields = mb.happyPathYields().collect(Collectors.toList()); + happyPathYields = mb.happyPathYields().toList(); assertThat(happyPathYields).hasSize(1); // correctly result constraint should be TRUE, but we enqueue also unreachable catch block which creates yield with FALSE result // and yields are reduced consequently diff --git a/java-symbolic-execution/src/test/java/org/sonar/java/se/FlowTest.java b/java-symbolic-execution/src/test/java/org/sonar/java/se/FlowTest.java index cb42fe9850a..f007aabccdc 100644 --- a/java-symbolic-execution/src/test/java/org/sonar/java/se/FlowTest.java +++ b/java-symbolic-execution/src/test/java/org/sonar/java/se/FlowTest.java @@ -24,7 +24,6 @@ import org.sonar.plugins.java.api.tree.Tree; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; @@ -38,7 +37,7 @@ void test_first_flow_location() { .add(locationWithMockTree("last")) .add(locationWithMockTree("first")) .build(); - List collect = flow1.firstFlowLocation().collect(Collectors.toList()); + List collect = flow1.firstFlowLocation().toList(); assertThat(collect).hasSize(1); assertThat(collect.get(0).msg).isEqualTo("first"); diff --git a/java-symbolic-execution/src/test/java/org/sonar/java/se/SECheckVerifier.java b/java-symbolic-execution/src/test/java/org/sonar/java/se/SECheckVerifier.java index 9a852c86800..3f90c8f52ac 100644 --- a/java-symbolic-execution/src/test/java/org/sonar/java/se/SECheckVerifier.java +++ b/java-symbolic-execution/src/test/java/org/sonar/java/se/SECheckVerifier.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Set; import java.util.function.Consumer; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.sensor.cache.ReadCache; @@ -59,7 +58,7 @@ public CheckVerifier withChecks(JavaFileScanner... checks) { List seChecks = Arrays.stream(checks) .filter(SECheck.class::isInstance) .map(SECheck.class::cast) - .collect(Collectors.toList()); + .toList(); List newCheckList = new ArrayList<>(); if (!seChecks.isEmpty()) { newCheckList.add(new SymbolicExecutionVisitor(seChecks)); diff --git a/java-symbolic-execution/src/test/java/org/sonar/java/se/symbolicvalues/RelationalSymbolicValueTest.java b/java-symbolic-execution/src/test/java/org/sonar/java/se/symbolicvalues/RelationalSymbolicValueTest.java index 7e1ac856840..cf62ebc1bd8 100644 --- a/java-symbolic-execution/src/test/java/org/sonar/java/se/symbolicvalues/RelationalSymbolicValueTest.java +++ b/java-symbolic-execution/src/test/java/org/sonar/java/se/symbolicvalues/RelationalSymbolicValueTest.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Set; import java.util.function.Supplier; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; import org.apache.commons.io.IOUtils; @@ -108,7 +107,7 @@ void test_normalization() throws Exception { private RelationalSymbolicValue relationalSV(Tree.Kind kind, SymbolicValue... computedFrom) { List computedFromSymbols = Arrays.stream(computedFrom).map(sv -> new ProgramState.SymbolicValueSymbol(sv, null)) - .collect(Collectors.toList()); + .toList(); return (RelationalSymbolicValue) constraintManager .createBinarySymbolicValue(new BinaryExpressionTreeImpl(kind, mock(ExpressionTree.class), mock(InternalSyntaxToken.class), mock(ExpressionTree.class)), computedFromSymbols); diff --git a/java-symbolic-execution/src/test/java/org/sonar/java/se/symbolicvalues/SymbolicValueTestUtil.java b/java-symbolic-execution/src/test/java/org/sonar/java/se/symbolicvalues/SymbolicValueTestUtil.java index 75b0a9a27a0..26bacf706d4 100644 --- a/java-symbolic-execution/src/test/java/org/sonar/java/se/symbolicvalues/SymbolicValueTestUtil.java +++ b/java-symbolic-execution/src/test/java/org/sonar/java/se/symbolicvalues/SymbolicValueTestUtil.java @@ -19,10 +19,8 @@ */ package org.sonar.java.se.symbolicvalues; -import org.sonar.java.se.ProgramState; - import java.util.Arrays; -import java.util.stream.Collectors; +import org.sonar.java.se.ProgramState; public class SymbolicValueTestUtil { @@ -31,7 +29,7 @@ private SymbolicValueTestUtil() { } public static void computedFrom(SymbolicValue symbolicValue, SymbolicValue... from) { - symbolicValue.computedFrom(Arrays.stream(from).map(sv -> new ProgramState.SymbolicValueSymbol(sv, null)).collect(Collectors.toList())); + symbolicValue.computedFrom(Arrays.stream(from).map(sv -> new ProgramState.SymbolicValueSymbol(sv, null)).toList()); } } diff --git a/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/BehaviorCacheTest.java b/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/BehaviorCacheTest.java index 09e00422dc0..7e7e7f6ebb5 100644 --- a/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/BehaviorCacheTest.java +++ b/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/BehaviorCacheTest.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledForJreRange; import org.junit.jupiter.api.condition.JRE; @@ -84,7 +83,7 @@ void method_behavior_cache_should_be_filled_and_cleanup() { assertThat(sev.behaviorCache.behaviors.values().stream().filter(mb -> mb != null).count()).isEqualTo(4); // check order of method exploration : last is the topMethod as it requires the other to get its behavior. // Then, as we explore fully a path before switching to another one (see the LIFO in EGW) : qix is handled before foo. - assertThat(sev.behaviorCache.behaviors.keySet().stream().collect(Collectors.toList())).containsSequence( + assertThat(sev.behaviorCache.behaviors.keySet().stream().toList()).containsSequence( "MethodBehavior#topMethod(Z)Z", "MethodBehavior#bar(Z)Z", "MethodBehavior#foo(Z)Z", @@ -145,7 +144,7 @@ void clear_stack_when_taking_exceptional_path_from_method_invocation_until_jdk17 behavior.happyPathYields().forEach(y -> assertThat(y.resultConstraint()).isNull()); assertThat(behavior.happyPathYields().count()).isEqualTo(1); - List exceptionalYields = behavior.exceptionalPathYields().collect(Collectors.toList()); + List exceptionalYields = behavior.exceptionalPathYields().toList(); assertThat(exceptionalYields).hasSize(3); assertThat(exceptionalYields.stream().filter(y -> y.exceptionType(semanticModel).isUnknown())).hasSize(1); } @@ -163,7 +162,7 @@ void clear_stack_when_taking_exceptional_path_from_method_invocation_until_jdk18 behavior.happyPathYields().forEach(y -> assertThat(y.resultConstraint()).isNull()); assertThat(behavior.happyPathYields().count()).isEqualTo(1); - List exceptionalYields = behavior.exceptionalPathYields().collect(Collectors.toList()); + List exceptionalYields = behavior.exceptionalPathYields().toList(); assertThat(exceptionalYields).hasSize(2); assertThat(exceptionalYields.stream().filter(y -> y.exceptionType(semanticModel).isUnknown())).hasSize(1); } @@ -189,7 +188,7 @@ void hardcoded_behaviors() throws Exception { .stream() .map(File::new) .map(SETestUtils::inputFile) - .collect(Collectors.toList()); + .toList(); for (InputFile inputFile : inputFiles) { CompilationUnitTreeImpl cut = (CompilationUnitTreeImpl) JParserTestUtils.parse("test", inputFile.contents(), SETestUtils.CLASS_PATH); diff --git a/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/ExceptionalYieldTest.java b/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/ExceptionalYieldTest.java index 349dc2a2f33..a09005f8c15 100644 --- a/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/ExceptionalYieldTest.java +++ b/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/ExceptionalYieldTest.java @@ -96,7 +96,7 @@ void exceptional_yields() { MethodBehavior mb = getMethodBehavior(sev, "myMethod"); assertThat(mb.yields()).hasSize(4); - List exceptionalYields = mb.exceptionalPathYields().collect(Collectors.toList()); + List exceptionalYields = mb.exceptionalPathYields().toList(); assertThat(exceptionalYields).hasSize(3); // runtime exception @@ -131,7 +131,7 @@ void exceptional_yields_void_method() { MethodBehavior mb = getMethodBehavior(sev, "myVoidMethod"); assertThat(mb.yields()).hasSize(4); - List exceptionalYields = mb.exceptionalPathYields().collect(Collectors.toList()); + List exceptionalYields = mb.exceptionalPathYields().toList(); assertThat(exceptionalYields).hasSize(3); assertThat(exceptionalYields.stream().filter(y -> y.exceptionType(semanticModel).isUnknown()).count()).isEqualTo(1); diff --git a/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/MethodBehaviorTest.java b/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/MethodBehaviorTest.java index d8f37a2be94..a894b041662 100644 --- a/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/MethodBehaviorTest.java +++ b/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/MethodBehaviorTest.java @@ -59,7 +59,7 @@ void method_behavior_yields() { List yields = mb.yields(); assertThat(yields).hasSize(3); - List trueResults = mb.happyPathYields().filter(my -> BooleanConstraint.TRUE.equals(my.resultConstraint().get(BooleanConstraint.class))).collect(Collectors.toList()); + List trueResults = mb.happyPathYields().filter(my -> BooleanConstraint.TRUE.equals(my.resultConstraint().get(BooleanConstraint.class))).toList(); assertThat(trueResults).hasSize(1); HappyPathYield trueResult = trueResults.get(0); @@ -70,7 +70,7 @@ void method_behavior_yields() { // result SV is a different SV than 'a' and 'b' assertThat(trueResult.resultIndex()).isEqualTo(-1); - List falseResults = mb.happyPathYields().filter(my -> BooleanConstraint.FALSE.equals(my.resultConstraint().get(BooleanConstraint.class))).collect(Collectors.toList()); + List falseResults = mb.happyPathYields().filter(my -> BooleanConstraint.FALSE.equals(my.resultConstraint().get(BooleanConstraint.class))).toList(); assertThat(falseResults).hasSize(2); // for both "False" results, 'a' has the constraint "not null" assertThat(falseResults.stream().filter(my -> !((ObjectConstraint) my.parametersConstraints.get(0).get(ObjectConstraint.class)).isNull()).count()).isEqualTo(2); @@ -159,7 +159,7 @@ void result_with_boolean_constraint_should_be_reduced() { addYield(mb, BooleanConstraint.FALSE, ObjectConstraint.NOT_NULL); mb.completed(); assertThat(mb.yields()).hasSize(2); - List resultConstraints = mb.yields().stream().map(y -> ((HappyPathYield) y).resultConstraint().get(BooleanConstraint.class)).collect(Collectors.toList()); + List resultConstraints = mb.yields().stream().map(y -> ((HappyPathYield) y).resultConstraint().get(BooleanConstraint.class)).toList(); assertThat(resultConstraints).contains(BooleanConstraint.TRUE, BooleanConstraint.FALSE); } @@ -170,7 +170,7 @@ void result_with_unreducible_constraint_should_not_be_reduced() { addYield(mb, ObjectConstraint.NULL); mb.completed(); assertThat(mb.yields()).hasSize(2); - List resultConstraints = mb.yields().stream().map(y -> ((HappyPathYield) y).resultConstraint().get(ObjectConstraint.class)).collect(Collectors.toList()); + List resultConstraints = mb.yields().stream().map(y -> ((HappyPathYield) y).resultConstraint().get(ObjectConstraint.class)).toList(); assertThat(resultConstraints).contains(ObjectConstraint.NULL, ObjectConstraint.NOT_NULL); } @@ -244,7 +244,7 @@ void anonymous_classes_used_as_exception_should_be_resolved_to_supertype() { SymbolicExecutionVisitor sev = visitorAndSemantic.a; Sema semanticModel = visitorAndSemantic.b; MethodBehavior mb = getMethodBehavior(sev, "throwException"); - List exceptionYields = mb.exceptionalPathYields().collect(Collectors.toList()); + List exceptionYields = mb.exceptionalPathYields().toList(); assertThat(exceptionYields).hasSize(3); assertThat(exceptionYields.stream() .map(ey -> ey.exceptionType(semanticModel)) diff --git a/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/MethodYieldTest.java b/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/MethodYieldTest.java index 51fcb4da84b..720d54b9a61 100644 --- a/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/MethodYieldTest.java +++ b/java-symbolic-execution/src/test/java/org/sonar/java/se/xproc/MethodYieldTest.java @@ -28,7 +28,6 @@ import java.util.Map; import java.util.Set; import java.util.function.Supplier; -import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; import org.junit.jupiter.api.Test; @@ -248,7 +247,7 @@ void constraints_on_varargs() throws Exception { List> arguments = usages.stream() .map(MethodYieldTest::getMethodIncoationArgumentsTypes) - .collect(Collectors.toList()); + .toList(); ProgramState ps = ProgramState.EMPTY_STATE; ProgramState psResult; @@ -258,27 +257,27 @@ void constraints_on_varargs() throws Exception { SymbolicValue svResult = new SymbolicValue(); // apply constraint NotNull to parameter - Collection arrayOfA = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1), arguments.get(0), ps, () -> svResult).collect(Collectors.toList()); + Collection arrayOfA = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1), arguments.get(0), ps, () -> svResult).toList(); assertThat(arrayOfA).hasSize(1); psResult = arrayOfA.iterator().next(); assertThat(psResult.getConstraint(svFirstArg, ObjectConstraint.class)).isEqualTo(ObjectConstraint.NOT_NULL); assertThat(psResult.getConstraint(svVarArg1, ObjectConstraint.class)).isEqualTo(ObjectConstraint.NOT_NULL); // apply constraint NotNull to parameter (B[] is a subtype of A[]) - Collection arrayOfB = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1), arguments.get(1), ps, () -> svResult).collect(Collectors.toList()); + Collection arrayOfB = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1), arguments.get(1), ps, () -> svResult).toList(); assertThat(arrayOfB).hasSize(1); psResult = arrayOfB.iterator().next(); assertThat(psResult.getConstraint(svFirstArg, ObjectConstraint.class)).isEqualTo(ObjectConstraint.NOT_NULL); assertThat(psResult.getConstraint(svVarArg1, ObjectConstraint.class)).isEqualTo(ObjectConstraint.NOT_NULL); // no constraint, as 'a' is not an array - Collection objectA = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1), arguments.get(2), ps, () -> svResult).collect(Collectors.toList()); + Collection objectA = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1), arguments.get(2), ps, () -> svResult).toList(); assertThat(objectA).hasSize(1); psResult = objectA.iterator().next(); assertThat(psResult.getConstraint(svFirstArg, ObjectConstraint.class)).isEqualTo(ObjectConstraint.NOT_NULL); assertThat(psResult.getConstraint(svVarArg1, ObjectConstraint.class)).isNull(); // no constraint, as 'a' and 'b' can not receive the constraint of the array - Collection objectsAandB = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1, svVarArg2), arguments.get(3), ps, () -> svResult).collect(Collectors.toList()); + Collection objectsAandB = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1, svVarArg2), arguments.get(3), ps, () -> svResult).toList(); assertThat(objectsAandB).hasSize(1); psResult = objectsAandB.iterator().next(); assertThat(psResult.getConstraint(svFirstArg, ObjectConstraint.class)).isEqualTo(ObjectConstraint.NOT_NULL); @@ -286,13 +285,13 @@ void constraints_on_varargs() throws Exception { assertThat(psResult.getConstraint(svVarArg2, ObjectConstraint.class)).isNull(); // no param, we only learn something about the argument which is not variadic - Collection noParam = yield.statesAfterInvocation(Collections.singletonList(svFirstArg), arguments.get(4), ps, () -> svResult).collect(Collectors.toList()); + Collection noParam = yield.statesAfterInvocation(Collections.singletonList(svFirstArg), arguments.get(4), ps, () -> svResult).toList(); assertThat(noParam).hasSize(1); psResult = noParam.iterator().next(); assertThat(psResult.getConstraint(svFirstArg, ObjectConstraint.class)).isEqualTo(ObjectConstraint.NOT_NULL); // null param, contradiction, no resulting program state ps = ProgramState.EMPTY_STATE.addConstraint(svFirstArg, ObjectConstraint.NULL); - Collection nullParam = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1), arguments.get(5), ps, () -> svResult).collect(Collectors.toList()); + Collection nullParam = yield.statesAfterInvocation(Arrays.asList(svFirstArg, svVarArg1), arguments.get(5), ps, () -> svResult).toList(); assertThat(nullParam).isEmpty(); } @@ -301,7 +300,7 @@ private static List getMethodIncoationArgumentsTypes(IdentifierTree identi while(!tree.is(Tree.Kind.METHOD_INVOCATION)) { tree = tree.parent(); } - return ((MethodInvocationTree) tree).arguments().stream().map(ExpressionTree::symbolType).collect(Collectors.toList()); + return ((MethodInvocationTree) tree).arguments().stream().map(ExpressionTree::symbolType).toList(); } @Test diff --git a/sonar-java-plugin/src/main/java/org/sonar/plugins/java/JavaSensor.java b/sonar-java-plugin/src/main/java/org/sonar/plugins/java/JavaSensor.java index 6dc651ad2a9..355e8b5a5eb 100644 --- a/sonar-java-plugin/src/main/java/org/sonar/plugins/java/JavaSensor.java +++ b/sonar-java-plugin/src/main/java/org/sonar/plugins/java/JavaSensor.java @@ -28,7 +28,6 @@ import java.util.Optional; import java.util.Set; import java.util.function.UnaryOperator; -import java.util.stream.Collectors; import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -128,7 +127,7 @@ private UnaryOperator> createCheckFilter(boolean isAutoScanCheck return checks -> checks.stream() .filter(check -> sonarComponents.getRuleKey(check).map(autoScanCompatibleRules::contains).orElse(false)) - .collect(Collectors.toList()); + .toList(); } else { return UnaryOperator.identity(); } @@ -152,7 +151,7 @@ static JavaCheck[] insertSymbolicExecutionVisitor(List checks) { List seChecks = checks.stream() .filter(SECheck.class::isInstance) .map(SECheck.class::cast) - .collect(Collectors.toList()); + .toList(); if (seChecks.isEmpty()) { LOG.info("No rules with 'symbolic-execution' tag were enabled," + " the Symbolic Execution Engine will not run during the analysis."); diff --git a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/CheckListTest.java b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/CheckListTest.java index 2764fab8b60..a4b32154f14 100644 --- a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/CheckListTest.java +++ b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/CheckListTest.java @@ -32,7 +32,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -66,7 +65,7 @@ public static void before() throws Exception { .stream() .map(ClassPath.ClassInfo::getSimpleName) .filter(name -> name.endsWith("Check") && !name.equals(SECheck.class.getSimpleName())) - .collect(Collectors.toList()); + .toList(); } /** diff --git a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaRulesDefinitionTest.java b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaRulesDefinitionTest.java index 407db80aae2..0e5106df5cc 100644 --- a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaRulesDefinitionTest.java +++ b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaRulesDefinitionTest.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.Locale; import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.sonar.api.SonarEdition; import org.sonar.api.SonarQubeSide; @@ -151,7 +150,7 @@ void test_deprecated_key() { List rulesWithManyDeprecatedKeys = repository.rules().stream() .filter(r -> r.deprecatedRuleKeys().size() >= 2) .map(RulesDefinition.Rule::key) - .collect(Collectors.toList()); + .toList(); assertThat(rulesWithManyDeprecatedKeys).isEmpty(); } diff --git a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/SanityTest.java b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/SanityTest.java index ae734d18d94..cc89c33d2ed 100644 --- a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/SanityTest.java +++ b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/SanityTest.java @@ -134,10 +134,10 @@ void test() throws Exception { List errorLogs = logTester.getLogs(Level.ERROR); List parsingErrors = errorLogs.stream() .filter(SanityTest::isParseError) - .collect(Collectors.toList()); + .toList(); List typeResolutionErrors = errorLogs.stream() .filter(SanityTest::isTypeResolutionError) - .collect(Collectors.toList()); + .toList(); SoftAssertions softly = new SoftAssertions(); softly.assertThat(errorLogs).hasSize(6);