From 5046125d5b0447f57143e31014746e09e1664053 Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Sat, 24 Oct 2026 03:04:45 +0200 Subject: [PATCH] MigratePoolingNHttpClientConnectionManager removes the imports it leaves unused The builder replacement drops the constructor's arguments, so a type named only there, such as DefaultConnectingIOReactor in new PoolingNHttpClientConnectionManager(new DefaultConnectingIOReactor()), kept an import nothing used. Schedule maybeRemoveImport for each type the arguments name. --- ...igratePoolingNHttpClientConnectionManager.java | 15 +++++++++++++++ ...tePoolingNHttpClientConnectionManagerTest.java | 1 - 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/openrewrite/apache/httpclient5/MigratePoolingNHttpClientConnectionManager.java b/src/main/java/org/openrewrite/apache/httpclient5/MigratePoolingNHttpClientConnectionManager.java index 0b9795c..8e2f94e 100644 --- a/src/main/java/org/openrewrite/apache/httpclient5/MigratePoolingNHttpClientConnectionManager.java +++ b/src/main/java/org/openrewrite/apache/httpclient5/MigratePoolingNHttpClientConnectionManager.java @@ -22,6 +22,7 @@ import org.openrewrite.Recipe; import org.openrewrite.TreeVisitor; import org.openrewrite.internal.ListUtils; +import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; import org.openrewrite.java.JavaVisitor; @@ -30,6 +31,9 @@ import org.openrewrite.java.tree.JavaType; import org.openrewrite.java.tree.TypeUtils; +import java.util.HashSet; +import java.util.Set; + @EqualsAndHashCode(callSuper = false) @Value public class MigratePoolingNHttpClientConnectionManager extends Recipe { @@ -54,6 +58,17 @@ public J visitNewClass(J.NewClass newClass, ExecutionContext ctx) { if (TypeUtils.isOfClassType(type, FQN_OLD)) { maybeRemoveImport(FQN_OLD); maybeAddImport(FQN_BUILDER); + // Dropping the constructor's arguments may remove the last use of the types they name + new JavaIsoVisitor>() { + @Override + public J.Identifier visitIdentifier(J.Identifier ident, Set argumentTypes) { + JavaType.FullyQualified fq = TypeUtils.asFullyQualified(ident.getType()); + if (fq != null && ident.getFieldType() == null) { + argumentTypes.add(fq.getFullyQualifiedName()); + } + return ident; + } + }.reduce(nc.getArguments(), new HashSet<>()).forEach(this::maybeRemoveImport); return JavaTemplate.builder("PoolingAsyncClientConnectionManagerBuilder.create().build()") .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "httpclient5", "httpcore5")) .imports(FQN_BUILDER) diff --git a/src/test/java/org/openrewrite/apache/httpclient5/MigratePoolingNHttpClientConnectionManagerTest.java b/src/test/java/org/openrewrite/apache/httpclient5/MigratePoolingNHttpClientConnectionManagerTest.java index 2132c58..7754cc5 100644 --- a/src/test/java/org/openrewrite/apache/httpclient5/MigratePoolingNHttpClientConnectionManagerTest.java +++ b/src/test/java/org/openrewrite/apache/httpclient5/MigratePoolingNHttpClientConnectionManagerTest.java @@ -152,7 +152,6 @@ PoolingNHttpClientConnectionManager createConnectionManager() throws Exception { """ import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager; import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder; - import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor; class A { PoolingAsyncClientConnectionManager createConnectionManager() throws Exception {