diff --git a/src/main/java/org/openrewrite/apache/httpclient5/MigrateRequestConfig.java b/src/main/java/org/openrewrite/apache/httpclient5/MigrateRequestConfig.java index 17c3b0e..fb623a3 100644 --- a/src/main/java/org/openrewrite/apache/httpclient5/MigrateRequestConfig.java +++ b/src/main/java/org/openrewrite/apache/httpclient5/MigrateRequestConfig.java @@ -63,11 +63,11 @@ public TreeVisitor getVisitor() { private static class MigrateRequestConfigPrecondition extends JavaIsoVisitor { @Override - public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, ExecutionContext executionContext) { + public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, ExecutionContext ctx) { if (MATCHER_STALE_CHECK_ENABLED.matches(method) && !Boolean.parseBoolean(method.getArguments().get(0).print())) { return SearchResult.found(method); } - return super.visitMethodInvocation(method, executionContext); + return super.visitMethodInvocation(method, ctx); } } @@ -84,27 +84,27 @@ public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, Execu doAfterVisit(new RemoveMethodInvocationsVisitor(Collections.singletonList(PATTERN_STALE_CHECK_ENABLED))); } else if (MATCHER_REQUEST_CONFIG.matches(method)) { Set connManagers = new HashSet<>(TreeVisitor.collect( - new JavaIsoVisitor() { - @Override - public J.VariableDeclarations visitVariableDeclarations(J.VariableDeclarations multiVariable, ExecutionContext ctx) { - if (TypeUtils.isOfClassType(multiVariable.getTypeAsFullyQualified(), FQN_POOL_CONN_MANAGER)) { - return SearchResult.found(multiVariable); - } - return super.visitVariableDeclarations(multiVariable, ctx); - } - }, - getCursor().firstEnclosing(J.MethodDeclaration.class), - new HashSet<>() + new JavaIsoVisitor() { + @Override + public J.VariableDeclarations visitVariableDeclarations(J.VariableDeclarations multiVariable, ExecutionContext ctx) { + if (TypeUtils.isOfClassType(multiVariable.getTypeAsFullyQualified(), FQN_POOL_CONN_MANAGER)) { + return SearchResult.found(multiVariable); + } + return super.visitVariableDeclarations(multiVariable, ctx); + } + }, + getCursor().firstEnclosing(J.MethodDeclaration.class), + new HashSet<>() )); // Call `setConnectionManager()` if there's no PoolingHttpClientConnectionManager // The `poolingHttpClientConnectionManager` will be created later in `visitMethodDeclaration()` if (connManagers.isEmpty()) { method = JavaTemplate.builder(method.print() + "\n.setConnectionManager(poolingHttpClientConnectionManager);"). - javaParser(JavaParser.fromJavaVersion().classpath(JavaParser.runtimeClasspath())) - .imports("org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager") - .build() - .apply(updateCursor(method), method.getCoordinates().replace()); + javaParser(JavaParser.fromJavaVersion().classpath(JavaParser.runtimeClasspath())) + .imports("org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager") + .build() + .apply(updateCursor(method), method.getCoordinates().replace()); } getCursor().putMessageOnFirstEnclosing(J.MethodDeclaration.class, KEY_HTTP_CLIENT_BUILDER, method); @@ -133,21 +133,21 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, Ex if (varsConnManager != null) { J.VariableDeclarations.NamedVariable connManager = varsConnManager.getVariables().get(0); method = JavaTemplate.builder("#{any(org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager)}.setValidateAfterInactivity(TimeValue.NEG_ONE_MILLISECOND);") - .javaParser(JavaParser.fromJavaVersion().classpath("httpclient5", "httpcore5")) - .imports("org.apache.hc.core5.util.TimeValue") - .build() - .apply(getCursor(), varsConnManager.getCoordinates().after(), connManager.getName()); + .javaParser(JavaParser.fromJavaVersion().classpath("httpclient5", "httpcore5")) + .imports("org.apache.hc.core5.util.TimeValue") + .build() + .apply(getCursor(), varsConnManager.getCoordinates().after(), connManager.getName()); } else { Statement httpClientBuilder = getCursor().getMessage(KEY_HTTP_CLIENT_BUILDER); // Consider it's an useless RequestConfig if there's no httpClientBuilder if (httpClientBuilder != null) { String tpl = "PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();" + - "poolingHttpClientConnectionManager.setValidateAfterInactivity(TimeValue.NEG_ONE_MILLISECOND);"; + "poolingHttpClientConnectionManager.setValidateAfterInactivity(TimeValue.NEG_ONE_MILLISECOND);"; method = JavaTemplate.builder(tpl) - .javaParser(JavaParser.fromJavaVersion().classpath(JavaParser.runtimeClasspath())) - .imports(FQN_POOL_CONN_MANAGER) - .build() - .apply(updateCursor(method), method.getBody().getCoordinates().firstStatement()); + .javaParser(JavaParser.fromJavaVersion().classpath(JavaParser.runtimeClasspath())) + .imports(FQN_POOL_CONN_MANAGER) + .build() + .apply(updateCursor(method), method.getBody().getCoordinates().firstStatement()); maybeAddImport(FQN_POOL_CONN_MANAGER); } } diff --git a/src/test/java/org/openrewrite/apache/httpclient5/UpgradeApacheHttpClient5Test.java b/src/test/java/org/openrewrite/apache/httpclient5/UpgradeApacheHttpClient5Test.java index fa01631..2c8c1e2 100644 --- a/src/test/java/org/openrewrite/apache/httpclient5/UpgradeApacheHttpClient5Test.java +++ b/src/test/java/org/openrewrite/apache/httpclient5/UpgradeApacheHttpClient5Test.java @@ -21,6 +21,7 @@ import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; +import org.openrewrite.test.TypeValidation; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -28,7 +29,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.openrewrite.java.Assertions.java; import static org.openrewrite.maven.Assertions.pomXml; -import org.openrewrite.test.TypeValidation; class UpgradeApacheHttpClient5Test implements RewriteTest { @@ -303,37 +303,37 @@ void method() { @Test void setStaleConnectionCheckEnabledTrue() { rewriteRun( - //language=java - java( - """ - import org.apache.http.client.config.RequestConfig; - import org.apache.http.impl.client.CloseableHttpClient; - import org.apache.http.impl.client.HttpClientBuilder; - - public class Example { - private CloseableHttpClient client() { - RequestConfig requestConfig = RequestConfig.custom().setStaleConnectionCheckEnabled(true).build(); - - return HttpClientBuilder.create() - .setDefaultRequestConfig(requestConfig) - .build(); - } - } - """, """ - import org.apache.hc.client5.http.config.RequestConfig; - import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; - import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; - - public class Example { - private CloseableHttpClient client() { - RequestConfig requestConfig = RequestConfig.custom().setStaleConnectionCheckEnabled(true).build(); - - return HttpClientBuilder.create() - .setDefaultRequestConfig(requestConfig) - .build(); - } - } - """) + //language=java + java( + """ + import org.apache.http.client.config.RequestConfig; + import org.apache.http.impl.client.CloseableHttpClient; + import org.apache.http.impl.client.HttpClientBuilder; + + public class Example { + private CloseableHttpClient client() { + RequestConfig requestConfig = RequestConfig.custom().setStaleConnectionCheckEnabled(true).build(); + + return HttpClientBuilder.create() + .setDefaultRequestConfig(requestConfig) + .build(); + } + } + """, """ + import org.apache.hc.client5.http.config.RequestConfig; + import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; + import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; + + public class Example { + private CloseableHttpClient client() { + RequestConfig requestConfig = RequestConfig.custom().setStaleConnectionCheckEnabled(true).build(); + + return HttpClientBuilder.create() + .setDefaultRequestConfig(requestConfig) + .build(); + } + } + """) ); } @@ -344,45 +344,45 @@ void setStaleConnectionCheckEnabledFalseWithConnManager() { //language=java java( """ - import org.apache.http.client.config.RequestConfig; - import org.apache.http.impl.client.CloseableHttpClient; - import org.apache.http.impl.client.HttpClientBuilder; - import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; - - public class Example { - private CloseableHttpClient client() { - RequestConfig requestConfig = RequestConfig.custom().setStaleConnectionCheckEnabled(false).build(); - - PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); - - return HttpClientBuilder.create() - .setConnectionManager(connManager) - .setDefaultRequestConfig(requestConfig) - .build(); - } - } - """, """ - import org.apache.hc.core5.util.TimeValue; - import org.apache.hc.client5.http.config.RequestConfig; - import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; - import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; - import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; - - public class Example { - private CloseableHttpClient client() { - RequestConfig requestConfig = RequestConfig.custom().build(); - - PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); - - connManager.setValidateAfterInactivity(TimeValue.NEG_ONE_MILLISECOND); - - return HttpClientBuilder.create() - .setConnectionManager(connManager) - .setDefaultRequestConfig(requestConfig) - .build(); - } - } - """) + import org.apache.http.client.config.RequestConfig; + import org.apache.http.impl.client.CloseableHttpClient; + import org.apache.http.impl.client.HttpClientBuilder; + import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; + + public class Example { + private CloseableHttpClient client() { + RequestConfig requestConfig = RequestConfig.custom().setStaleConnectionCheckEnabled(false).build(); + + PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); + + return HttpClientBuilder.create() + .setConnectionManager(connManager) + .setDefaultRequestConfig(requestConfig) + .build(); + } + } + """, """ + import org.apache.hc.core5.util.TimeValue; + import org.apache.hc.client5.http.config.RequestConfig; + import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; + import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; + import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; + + public class Example { + private CloseableHttpClient client() { + RequestConfig requestConfig = RequestConfig.custom().build(); + + PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); + + connManager.setValidateAfterInactivity(TimeValue.NEG_ONE_MILLISECOND); + + return HttpClientBuilder.create() + .setConnectionManager(connManager) + .setDefaultRequestConfig(requestConfig) + .build(); + } + } + """) ); } @@ -394,38 +394,40 @@ void setStaleConnectionCheckEnabledFalseWithoutConnManager() { //language=java java( """ - import org.apache.http.client.config.RequestConfig; - import org.apache.http.impl.client.CloseableHttpClient; - import org.apache.http.impl.client.HttpClientBuilder; - - public class Example { - private CloseableHttpClient client() { - RequestConfig requestConfig = RequestConfig.custom().setStaleConnectionCheckEnabled(false).build(); - - return HttpClientBuilder.create() - .setDefaultRequestConfig(requestConfig) - .build(); - } - } - """, """ - import org.apache.hc.client5.http.config.RequestConfig; - import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; - import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; - import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; - - public class Example { - private CloseableHttpClient client() { - PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); - poolingHttpClientConnectionManager.setValidateAfterInactivity(TimeValue.NEG_ONE_MILLISECOND); - RequestConfig requestConfig = RequestConfig.custom().build(); - - return HttpClientBuilder.create() - .setDefaultRequestConfig(requestConfig) - .setConnectionManager(poolingHttpClientConnectionManager) - .build(); - } - } - """) + import org.apache.http.client.config.RequestConfig; + import org.apache.http.impl.client.CloseableHttpClient; + import org.apache.http.impl.client.HttpClientBuilder; + + public class Example { + private CloseableHttpClient client() { + RequestConfig requestConfig = RequestConfig.custom().setStaleConnectionCheckEnabled(false).build(); + + return HttpClientBuilder.create() + .setDefaultRequestConfig(requestConfig) + .build(); + } + } + """, + """ + import org.apache.hc.client5.http.config.RequestConfig; + import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; + import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; + import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; + + public class Example { + private CloseableHttpClient client() { + PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); + poolingHttpClientConnectionManager.setValidateAfterInactivity(TimeValue.NEG_ONE_MILLISECOND); + RequestConfig requestConfig = RequestConfig.custom().build(); + + return HttpClientBuilder.create() + .setDefaultRequestConfig(requestConfig) + .setConnectionManager(poolingHttpClientConnectionManager) + .build(); + } + } + """ + ) ); } }