Skip to content

Commit de9f20c

Browse files
committed
try to handle chained call
1 parent 349a3af commit de9f20c

1 file changed

Lines changed: 20 additions & 4 deletions

File tree

src/main/java/org/openrewrite/java/testing/junit5/UpdateMockWebServerMockResponse.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
import org.openrewrite.java.search.UsesType;
3333
import org.openrewrite.java.tree.Expression;
3434
import org.openrewrite.java.tree.J;
35+
import org.openrewrite.java.tree.JRightPadded;
3536
import org.openrewrite.java.tree.JavaType;
37+
import org.openrewrite.java.tree.Space;
3638
import org.openrewrite.java.tree.TypeUtils;
3739

3840
import java.util.Arrays;
@@ -45,6 +47,8 @@
4547
import java.util.stream.IntStream;
4648

4749
import static java.util.stream.Collectors.toList;
50+
import static java.util.stream.Collectors.toMap;
51+
import static java.util.stream.Collectors.toSet;
4852

4953
public class UpdateMockWebServerMockResponse extends Recipe {
5054
private static final String OLD_PACKAGE_NAME = "okhttp3.mockwebserver";
@@ -202,17 +206,29 @@ public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, Execu
202206
return replacement;
203207
}
204208

209+
List<Integer> indices = methodInvocationsToAdjust.remove(mi.getId());
210+
if (indices == null || indices.isEmpty()) {
211+
return mi;
212+
}
213+
205214
// Wrap MockResponse.Builder arguments with .build()
206215
Cursor methodCursor = getCursor();
207-
replacement = mi.withArguments(ListUtils.map(mi.getArguments(), arg -> {
208-
if (TypeUtils.isAssignableTo(NEW_MOCKRESPONSE_FQN_BUILDER, arg.getType())) {
216+
replacement = mi.withArguments(ListUtils.map(mi.getArguments(), (index, arg) -> {
217+
if (indices.contains(index) && TypeUtils.isAssignableTo(NEW_MOCKRESPONSE_FQN_BUILDER, arg.getType())) {
209218
Cursor argCursor = new Cursor(methodCursor, arg);
210-
return JavaTemplate
211-
.builder("#{any(mockwebserver3.MockResponse$Builder)}.build()")
219+
boolean isChainedCall = arg instanceof J.MethodInvocation;
220+
String nl = isChainedCall ? "\n" : "";
221+
J.MethodInvocation transformed = JavaTemplate
222+
.builder("#{any(mockwebserver3.MockResponse$Builder)}" + nl + ".build()")
212223
.javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockwebserver3"))
213224
.imports("mockwebserver3.MockResponse", "mockwebserver3.MockResponse.Builder")
214225
.build()
215226
.apply(argCursor, arg.getCoordinates().replace(), arg);
227+
228+
if (isChainedCall) {
229+
transformed = transformed.withPrefix(arg.getPrefix());
230+
}
231+
return transformed;
216232
}
217233
return arg;
218234
}));

0 commit comments

Comments
 (0)