From bdcc2b28cc0bb9b97ed4cc485f7703f0417346da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Coet?= Date: Wed, 19 Aug 2026 13:10:11 +0200 Subject: [PATCH] Fix QG: Move regex patterns outside of loop --- .../org/sonar/java/checks/MarkdownJavadocSyntaxCheck.java | 4 ++-- .../main/java/org/sonar/java/checks/PseudoRandomCheck.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/java-checks/src/main/java/org/sonar/java/checks/MarkdownJavadocSyntaxCheck.java b/java-checks/src/main/java/org/sonar/java/checks/MarkdownJavadocSyntaxCheck.java index f4b2b05fc6f..795bc9c0993 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/MarkdownJavadocSyntaxCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/MarkdownJavadocSyntaxCheck.java @@ -117,6 +117,7 @@ void reportNonMarkdownSyntax(SyntaxTrivia trivia, Position start, Position end) static String replaceQuotedCodeWithBlanks(String javadoc) { StringBuilder result = new StringBuilder(); int currentPosition = 0; + Pattern printablePattern = Pattern.compile("\\p{Print}"); while (currentPosition != -1) { int nextQuote = javadoc.indexOf("`", currentPosition); if (nextQuote != -1) { @@ -125,8 +126,7 @@ static String replaceQuotedCodeWithBlanks(String javadoc) { int endOfQuote = currentPosition == -1 ? javadoc.length() : currentPosition; // Replace all printable characters by spaces, so that they can't be interpreted as tags. // Don't replace non-printable characters, as this could interfere with line counting. - result.append(javadoc.substring(nextQuote, endOfQuote) - .replaceAll("\\p{Print}", " ")); + result.append(printablePattern.matcher(javadoc.substring(nextQuote, endOfQuote)).replaceAll(" ")); } else { result.append(javadoc, currentPosition, javadoc.length()); currentPosition = -1; diff --git a/java-checks/src/main/java/org/sonar/java/checks/PseudoRandomCheck.java b/java-checks/src/main/java/org/sonar/java/checks/PseudoRandomCheck.java index fc037817bdc..58e55a231c9 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/PseudoRandomCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/PseudoRandomCheck.java @@ -24,6 +24,7 @@ import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.regex.Pattern; import org.sonar.check.Rule; import org.sonar.java.checks.helpers.ExpressionsHelper; import org.sonar.java.model.ExpressionUtils; @@ -191,6 +192,7 @@ private static Tree findDeclarationScope(Tree tree) { // when all-uppercase, or split further on capital-letter boundaries. static List tokenizeIdentifier(String identifier) { List words = new ArrayList<>(); + Pattern splitPattern = Pattern.compile("(?=[A-Z])"); for (String part : identifier.split("_")) { if (part.isEmpty()) { continue; @@ -198,7 +200,7 @@ static List tokenizeIdentifier(String identifier) { if (isAllUppercaseWithLetter(part)) { words.add(part.toLowerCase(Locale.ROOT)); } else { - for (String sub : part.split("(?=[A-Z])")) { + for (String sub : splitPattern.split(part)) { if (!sub.isEmpty()) { words.add(sub.toLowerCase(Locale.ROOT)); }