Skip to content

Instantly share code, notes, and snippets.

@jkschneider
Created May 10, 2022 16:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jkschneider/ea40a1688f28742ec5a90952f8673a46 to your computer and use it in GitHub Desktop.
Save jkschneider/ea40a1688f28742ec5a90952f8673a46 to your computer and use it in GitHub Desktop.
package org.openrewrite.java.spring;
import org.openrewrite.ExecutionContext;
import org.openrewrite.Recipe;
import org.openrewrite.TreeVisitor;
import org.openrewrite.java.*;
import org.openrewrite.java.search.UsesMethod;
import org.openrewrite.java.tree.J;
public class WebClientMaxConnections extends Recipe {
private static final MethodMatcher httpClientCreate = new MethodMatcher(
"reactor.netty.http.client.HttpClient create()");
@Override
public String getDisplayName() {
return "WebClient max connection count";
}
@Override
protected TreeVisitor<?, ExecutionContext> getSingleSourceApplicableTest() {
return new UsesMethod<>(httpClientCreate);
}
@Override
protected JavaVisitor<ExecutionContext> getVisitor() {
return new JavaIsoVisitor<>() {
private final JavaTemplate optimize = JavaTemplate.builder(this::getCursor,
"ConnectionProvider.builder(\"connectionProvider\").maxConnections(500).build()")
.imports("reactor.netty.resources.ConnectionProvider")
.javaParser(() -> JavaParser.fromJavaVersion()
.classpath("reactor-netty-http", "reactor-netty-core", "reactor-core").build())
.build();
@Override
public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, ExecutionContext ctx) {
J.MethodInvocation m = super.visitMethodInvocation(method, ctx);
if (httpClientCreate.matches(m)) {
m = m.withTemplate(optimize, m.getCoordinates().replaceArguments());
maybeAddImport("reactor.netty.resources.ConnectionProvider");
}
return m;
}
};
}
}
package org.openrewrite.java.spring.org.openrewrite.java.spring
import org.junit.jupiter.api.Test
import org.openrewrite.java.JavaParser
import org.openrewrite.java.spring.WebClientMaxConnections
import org.openrewrite.test.RecipeSpec
import org.openrewrite.test.RewriteTest
class WebClientMaxConnectionsTest : RewriteTest {
override fun defaults(spec: RecipeSpec) {
spec.recipe(WebClientMaxConnections())
spec.parser(JavaParser.fromJavaVersion()
.logCompilationWarningsAndErrors(true)
.classpath("reactor-netty-http", "reactor-netty-core").build())
}
@Test
fun webclientOptimization() = rewriteRun(
java(
"""
import reactor.netty.http.client.HttpClient;
class Test {
void test() {
HttpClient httpClient = HttpClient.create();
}
}
""",
"""
import reactor.netty.http.client.HttpClient;
import reactor.netty.resources.ConnectionProvider;
class Test {
void test() {
HttpClient httpClient = HttpClient.create(ConnectionProvider.builder("connectionProvider").maxConnections(500).build());
}
}
"""
)
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment