Skip to content

Commit 6144259

Browse files
author
Tim te Beek
authored
No need to wrap String.formatted for local variable or field (#121)
1 parent 99059a5 commit 6144259

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

src/main/java/org/openrewrite/java/migrate/lang/StringFormatted.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,9 @@ public J visitMethodInvocation(J.MethodInvocation method, ExecutionContext p) {
6363
}
6464

6565
List<Expression> arguments = mi.getArguments();
66-
String template = String.format(
67-
arguments.get(0) instanceof J.Literal || arguments.get(0) instanceof J.MethodInvocation
68-
? "#{any(java.lang.String)}.formatted(%s)"
69-
: "(#{any(java.lang.String)}).formatted(%s)",
66+
String template = String.format(wrapperNotNeeded(arguments.get(0))
67+
? "#{any(java.lang.String)}.formatted(%s)"
68+
: "(#{any(java.lang.String)}).formatted(%s)",
7069
String.join(", ", Collections.nCopies(arguments.size() - 1, "#{any()}")));
7170
maybeRemoveImport("java.lang.String.format");
7271
return mi.withTemplate(
@@ -76,6 +75,12 @@ public J visitMethodInvocation(J.MethodInvocation method, ExecutionContext p) {
7675
mi.getCoordinates().replace(),
7776
arguments.toArray());
7877
}
78+
79+
private static boolean wrapperNotNeeded(Expression expression) {
80+
return expression instanceof J.Identifier
81+
|| expression instanceof J.Literal
82+
|| expression instanceof J.MethodInvocation;
83+
}
7984
}
8085

8186
@Override

src/test/kotlin/org/openrewrite/java/migrate/lang/StringFormattedTest.kt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,44 @@ class StringFormattedTest : RewriteTest {
139139
""")
140140
)
141141

142+
@Test
143+
@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/77")
144+
fun doNotWrapLocalVariable() = rewriteRun(
145+
java("""
146+
class A {
147+
String someMethod() {
148+
String fmt = "foo %s";
149+
String str = String.format(fmt, "a");
150+
}
151+
}
152+
""",
153+
"""
154+
class A {
155+
String someMethod() {
156+
String fmt = "foo %s";
157+
String str = fmt.formatted("a");
158+
}
159+
}
160+
""")
161+
)
162+
163+
@Test
164+
@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/77")
165+
fun doNotWrapField() = rewriteRun(
166+
java("""
167+
class A {
168+
static final String fmt = "foo %s";
169+
String str = String.format(fmt, "a");
170+
}
171+
""",
172+
"""
173+
class A {
174+
static final String fmt = "foo %s";
175+
String str = fmt.formatted("a");
176+
}
177+
""")
178+
)
179+
142180
@Test
143181
@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/77")
144182
fun removeStaticImport() = rewriteRun(

0 commit comments

Comments
 (0)