From f8bb477f9298876141c00813247180ed93dcc1b5 Mon Sep 17 00:00:00 2001 From: Steve Elliott Date: Tue, 2 Jun 2026 14:40:50 -0400 Subject: [PATCH 1/2] Match shutdown() against pre-rename MockWebServer type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ChangeMethodName step targeted `mockwebserver3.MockWebServer shutdown()` — the post-rename type — but ran before UpdateMockWebServerMockResponse performs the `okhttp3.mockwebserver` -> `mockwebserver3` ChangePackage. On the first cycle the pattern can't match (the call's declaring type is still the old `okhttp3.mockwebserver.MockWebServer`), so the rename only completes via a second iteration cycle. Targeting the pre-rename type lets the rename happen in a single cycle: shutdown() -> close() while the old types are still in scope, then UpdateMockWebServerMockResponse does the bulk package move at the end of the recipe. --- .../resources/META-INF/rewrite/junit5.yml | 2 +- .../UpgradeOkHttpMockWebServerTest.java | 68 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/rewrite/junit5.yml b/src/main/resources/META-INF/rewrite/junit5.yml index 1c884fbc9..cefd2bf66 100755 --- a/src/main/resources/META-INF/rewrite/junit5.yml +++ b/src/main/resources/META-INF/rewrite/junit5.yml @@ -314,7 +314,7 @@ recipeList: acceptTransitive: true scope: test - org.openrewrite.java.ChangeMethodName: - methodPattern: "mockwebserver3.MockWebServer shutdown()" + methodPattern: "okhttp3.mockwebserver.MockWebServer shutdown()" newMethodName: close - org.openrewrite.java.testing.junit5.UpdateMockWebServerMockResponse --- diff --git a/src/test/java/org/openrewrite/java/testing/junit5/UpgradeOkHttpMockWebServerTest.java b/src/test/java/org/openrewrite/java/testing/junit5/UpgradeOkHttpMockWebServerTest.java index ea39b0507..dff9e2b9a 100644 --- a/src/test/java/org/openrewrite/java/testing/junit5/UpgradeOkHttpMockWebServerTest.java +++ b/src/test/java/org/openrewrite/java/testing/junit5/UpgradeOkHttpMockWebServerTest.java @@ -126,4 +126,72 @@ class ApiTest { ) ); } + + @Test + void shouldRenameShutdownToCloseAlongWithPackageChange() { + rewriteRun( + spec -> spec + .recipeFromResource( + "/META-INF/rewrite/junit5.yml", + "org.openrewrite.java.testing.junit5.UpgradeOkHttpMockWebServer") + .parser(JavaParser.fromJavaVersion() + .classpathFromResources(new InMemoryExecutionContext(), + "mockwebserver-4.10", + "okhttp-4.10", + "okio-jvm-3.12" + )), + mavenProject("project", + //language=xml + pomXml( + """ + + 4.0.0 + com.example + demo + 0.0.1-SNAPSHOT + + + com.squareup.okhttp3 + mockwebserver + 4.10.0 + test + + + + """, + spec -> spec.after(pom -> + assertThat(pom) + .doesNotContain("mockwebserver") + .contains("mockwebserver3") + .actual() + ) + ), + srcTestJava( + //language=java + java( + """ + import okhttp3.mockwebserver.MockWebServer; + + class ApiTest { + MockWebServer server = new MockWebServer(); + void stop() { + server.shutdown(); + } + } + """, + """ + import mockwebserver3.MockWebServer; + + class ApiTest { + MockWebServer server = new MockWebServer(); + void stop() { + server.close(); + } + } + """ + ) + ) + ) + ); + } } From 4e80957cf3fe334b84ea1172f33e4e469e795c6b Mon Sep 17 00:00:00 2001 From: Steve Elliott Date: Tue, 2 Jun 2026 15:10:06 -0400 Subject: [PATCH 2/2] Use mockwebserver-4.10 + junit-4 classpath to resolve shutdown() in test The Java parser fails to type-resolve method calls on `okhttp3.mockwebserver.MockWebServer` when the JUnit 4 `org.junit.rules.ExternalResource` supertype isn't on the parser classpath. Both 3.14 and 4.10 mockwebserver extend ExternalResource. The constructor still resolves without it (so simpler tests pass), but a method invocation like `server.shutdown()` ends up with a malformed declaring type. Mirrors the parser classpath used by sibling UpdateMockWebServerMockResponseTest. --- .../java/testing/junit5/UpgradeOkHttpMockWebServerTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/openrewrite/java/testing/junit5/UpgradeOkHttpMockWebServerTest.java b/src/test/java/org/openrewrite/java/testing/junit5/UpgradeOkHttpMockWebServerTest.java index dff9e2b9a..d171d592a 100644 --- a/src/test/java/org/openrewrite/java/testing/junit5/UpgradeOkHttpMockWebServerTest.java +++ b/src/test/java/org/openrewrite/java/testing/junit5/UpgradeOkHttpMockWebServerTest.java @@ -138,7 +138,8 @@ void shouldRenameShutdownToCloseAlongWithPackageChange() { .classpathFromResources(new InMemoryExecutionContext(), "mockwebserver-4.10", "okhttp-4.10", - "okio-jvm-3.12" + "okio-jvm-3.12", + "junit-4" )), mavenProject("project", //language=xml