Skip to content

Commit 123b17d

Browse files
authored
Specify locale in toLowerCase|toUpperCase (#893)
This commit makes sure that all usages of String toLowerCase and toUpperCase specify a Locale (default of Locale.ROOT). Also, a checkstyle rule is added to prevent usage of the no-arg variant of String toLowerCase and toUpperCase.
1 parent 35c8b02 commit 123b17d

File tree

5 files changed

+25
-5
lines changed

5 files changed

+25
-5
lines changed

spring-pulsar-docs/src/main/antora/modules/ROOT/pages/reference/pulsar/transactions.adoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ Given the following listener method:
9393
----
9494
@PulsarListener(topics = "my-input-topic") // <1>
9595
void listen(String msg) { // <2>
96-
var transformedMsg = msg.toUpperCase(); // <3>
96+
var transformedMsg = msg.toUpperCase(Locale.ROOT); // <3>
9797
this.transactionalTemplate.send("my-output-topic", transformedMsg); // <4>
9898
} // <5> <6>
9999
----
@@ -215,7 +215,7 @@ The DB transaction is committed first; if the Pulsar transaction fails to commit
215215
@PulsarListener(topics = "my-input-topic")
216216
@Transactional("dataSourceTransactionManager")
217217
void listen(String msg) {
218-
var transformedMsg = msg.toUpperCase();
218+
var transformedMsg = msg.toUpperCase(Locale.ROOT);
219219
this.pulsarTemplate.send("my-output-topic", transformedMsg);
220220
this.jdbcTemplate.execute("insert into my_table (data) values ('%s')".formatted(transformedMsg));
221221
}

spring-pulsar/src/main/java/org/springframework/pulsar/function/PulsarFunctionAdministration.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Collections;
2121
import java.util.LinkedHashMap;
2222
import java.util.List;
23+
import java.util.Locale;
2324
import java.util.Map;
2425
import java.util.Optional;
2526
import java.util.stream.Stream;
@@ -314,7 +315,7 @@ private Optional<Exception> safeInvoke(Runnable invocation) {
314315
}
315316

316317
private String functionDesc(PulsarFunctionOperations<?> function) {
317-
return "'%s' %s".formatted(function.name(), function.type().toString().toLowerCase());
318+
return "'%s' %s".formatted(function.name(), function.type().toString().toLowerCase(Locale.ROOT));
318319
}
319320

320321
/**

spring-pulsar/src/main/java/org/springframework/pulsar/support/header/PulsarHeaderMatcher.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.pulsar.support.header;
1818

19+
import java.util.Locale;
1920
import java.util.Set;
2021

2122
import org.springframework.core.log.LogAccessor;
@@ -92,13 +93,13 @@ public static PatternMatch fromPatternString(String pattern) {
9293

9394
public PatternMatch(String pattern, boolean negate) {
9495
Assert.notNull(pattern, "Pattern must not be null");
95-
this.pattern = pattern.toLowerCase();
96+
this.pattern = pattern.toLowerCase(Locale.ROOT);
9697
this.negate = negate;
9798
}
9899

99100
@Override
100101
public boolean matchHeader(String headerName) {
101-
if (!PatternMatchUtils.simpleMatch(this.pattern, headerName.toLowerCase())) {
102+
if (!PatternMatchUtils.simpleMatch(this.pattern, headerName.toLowerCase(Locale.ROOT))) {
102103
return false;
103104
}
104105
LOGGER.debug(() -> "headerName=[%s] WILL %s be mapped, matched pattern=%s".formatted(headerName,

src/checkstyle/checkstyle-suppressions.xml

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
<suppress files="PulsarFunctionAdministrationIntegrationTests" checks="Regexp" />
1010
<suppress files="Proto" checks=".*"/>
1111
<suppress files=".*Tests" checks="HideUtilityClassConstructor" />
12+
<suppress files=".*Tests" checks="RegexpSinglelineJava" id="toLowerCaseWithoutLocale"/>
13+
<suppress files=".*Tests" checks="RegexpSinglelineJava" id="toUpperCaseWithoutLocale"/>
1214
<suppress files="[\\/]spring-pulsar-docs[\\/]" checks="JavadocPackage|JavadocType|JavadocVariable|SpringDeprecatedCheck" />
1315
<suppress files="[\\/]spring-pulsar-docs[\\/]" checks="SpringJavadoc" message="\@since" />
1416
<suppress files="[\\/]spring-pulsar-docs[\\/].*jooq" checks="AvoidStaticImport" />

src/checkstyle/checkstyle.xml

+16
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,22 @@
169169
value="Please use AssertJ imports."/>
170170
<property name="ignoreComments" value="true"/>
171171
</module>
172+
<module name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineJavaCheck">
173+
<property name="id" value="toLowerCaseWithoutLocale"/>
174+
<property name="format" value="\.toLowerCase\(\)"/>
175+
<property name="maximum" value="0"/>
176+
<property name="message"
177+
value="String.toLowerCase() should be String.toLowerCase(Locale.ROOT)"/>
178+
<property name="ignoreComments" value="true"/>
179+
</module>
180+
<module name="com.puppycrawl.tools.checkstyle.checks.regexp.RegexpSinglelineJavaCheck">
181+
<property name="id" value="toUpperCaseWithoutLocale"/>
182+
<property name="format" value="\.toUpperCase\(\)"/>
183+
<property name="maximum" value="0"/>
184+
<property name="message"
185+
value="String.toUpperCase() should be String.toUpperCase(Locale.ROOT)"/>
186+
<property name="ignoreComments" value="true"/>
187+
</module>
172188
<module name="Regexp">
173189
<property name="format" value="[ \t]+$"/>
174190
<property name="illegalPattern" value="true"/>

0 commit comments

Comments
 (0)