Skip to content

Commit 95e3cad

Browse files
authored
Handle single quotes in ReplaceStringBuilderWithString (#775)
1 parent 16c0223 commit 95e3cad

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/main/java/org/openrewrite/staticanalysis/ReplaceStringBuilderWithString.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,21 @@ private J.Literal toStringLiteral(J.Literal input) {
101101
return input;
102102
}
103103

104+
// Handle character literals by stripping single quotes and wrapping in double quotes
105+
if (input.getType() == JavaType.Primitive.Char) {
106+
String charSource = input.getValueSource();
107+
if (charSource != null && charSource.length() >= 2 &&
108+
charSource.startsWith("'") && charSource.endsWith("'")) {
109+
String charContent = charSource.substring(1, charSource.length() - 1);
110+
String stringValue = input.getValue() != null ? String.valueOf(input.getValue()) : charContent;
111+
String valueSource = "\"" + charContent + "\"";
112+
return input
113+
.withType(JavaType.Primitive.String)
114+
.withValue(stringValue)
115+
.withValueSource(valueSource);
116+
}
117+
}
118+
104119
String value = input.getValueSource();
105120
return new J.Literal(randomId(), Space.EMPTY, Markers.EMPTY, value,
106121
"\"" + value + "\"", null, JavaType.Primitive.String);

src/test/java/org/openrewrite/staticanalysis/ReplaceStringBuilderWithStringTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,4 +390,35 @@ void print(String str, String str2) {
390390
)
391391
);
392392
}
393+
394+
@Test
395+
void characterLiterals() {
396+
rewriteRun(
397+
//language=java
398+
java(
399+
"""
400+
class A {
401+
String track(Object consumer) {
402+
return "tracked";
403+
}
404+
405+
String method(String text, Object consumer) {
406+
return new StringBuilder(50).append('[').append(track(consumer)).append("]: ").append(text).toString();
407+
}
408+
}
409+
""",
410+
"""
411+
class A {
412+
String track(Object consumer) {
413+
return "tracked";
414+
}
415+
416+
String method(String text, Object consumer) {
417+
return "[" + track(consumer) + "]: " + text;
418+
}
419+
}
420+
"""
421+
)
422+
);
423+
}
393424
}

0 commit comments

Comments
 (0)