Skip to content

Commit aa3f14f

Browse files
Avoid unsafe changes in JulParameterizedArguments when JavaType.Array argument is not a J.NewArray (#244)
* support migrating `JUL.log("{0}", arrayIdentifier)` to slf4j * applied multiple review suggestions * Use static import for Collections * Apply suggestions from code review * Revert the array unpacking improvement First time testing for a negative case shows that the recipe isn't producing valid code by itself and that `org.openrewrite.java.logging.slf4j.JulToSlf4j` isn't either. Fixed in the next commit. * Skip `JulParameterizedArguments` to avoid unsafe change there --------- Co-authored-by: Tim te Beek <[email protected]>
1 parent 249944e commit aa3f14f

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

src/main/java/org/openrewrite/java/logging/slf4j/JulParameterizedArguments.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, Execu
9292
Expression messageArgument = originalArguments.get(1);
9393
Expression stringFormatArgument = originalArguments.get(2);
9494

95+
if (stringFormatArgument.getType() instanceof JavaType.Array &&
96+
!(stringFormatArgument instanceof J.NewArray)) {
97+
return method;
98+
}
99+
95100
if (!(levelArgument instanceof J.FieldAccess || levelArgument instanceof J.Identifier) ||
96101
!isStringLiteral(messageArgument)) {
97102
return method;

src/test/java/org/openrewrite/java/logging/slf4j/JulParameterizedArgumentsTest.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
*/
1616
package org.openrewrite.java.logging.slf4j;
1717

18+
import org.junit.jupiter.api.Disabled;
1819
import org.junit.jupiter.api.Test;
1920
import org.openrewrite.DocumentExample;
21+
import org.openrewrite.Issue;
2022
import org.openrewrite.test.RecipeSpec;
2123
import org.openrewrite.test.RewriteTest;
2224

@@ -88,6 +90,34 @@ void method(Logger logger, String param1, String param2) {
8890
);
8991
}
9092

93+
@Test
94+
void parameterizedArgumentArrayWithNoInitializer() {
95+
rewriteRun(
96+
// language=java
97+
java(
98+
"""
99+
import java.util.logging.Level;
100+
import java.util.logging.Logger;
101+
102+
class Test {
103+
void method(Logger logger) {
104+
logger.log(Level.INFO, "INFO Log entry", new String[]{});
105+
}
106+
}
107+
""",
108+
"""
109+
import org.slf4j.Logger;
110+
111+
class Test {
112+
void method(Logger logger) {
113+
logger.info("INFO Log entry");
114+
}
115+
}
116+
"""
117+
)
118+
);
119+
}
120+
91121
@Test
92122
void retainLoggedArgumentOrder() {
93123
rewriteRun(
@@ -116,6 +146,28 @@ void method(Logger logger, String param1, String param2) {
116146
);
117147
}
118148

149+
@Disabled("Skipped by `JulParameterizedArguments`, but incomplete changes seen from JUL -> Log4j -> Slf4j")
150+
@Issue("https://github.com/openrewrite/rewrite-logging-frameworks/pull/244#issuecomment-3140661425")
151+
@Test
152+
void arrayIdentifierArgument() {
153+
rewriteRun(
154+
// language=java
155+
java(
156+
"""
157+
import java.util.logging.Level;
158+
import java.util.logging.Logger;
159+
160+
class Test {
161+
void method(Logger logger, String[] params) {
162+
logger.log(Level.INFO, "INFO Log entry, param2: {1}, param1: {0}, etc", params);
163+
logger.log(Level.INFO, "INFO Log entry, param1: {0}, param2: {1}, etc", params);
164+
}
165+
}
166+
"""
167+
)
168+
);
169+
}
170+
119171
@Test
120172
void repeatLoggedArgumentAsNeeded() {
121173
rewriteRun(

0 commit comments

Comments
 (0)