Rename TypeInstrumentation#classLoaderMatcher() to classLoaderOptimization() (#1741)

* Rename TypeInstrumentation#classLoaderMatcher() to classLoaderOptimization()

* Removed no longer needed comments & improved JavaDoc

* Improve TypeInstrumentation Javadoc
This commit is contained in:
Mateusz Rzeszutek 2020-11-24 13:27:58 +01:00 committed by GitHub
parent 7e8d549347
commit 45646ff367
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
87 changed files with 115 additions and 175 deletions

View File

@ -38,8 +38,7 @@ final class AkkaForkJoinTaskInstrumentation implements TypeInstrumentation {
static final String TASK_CLASS_NAME = "akka.dispatch.forkjoin.ForkJoinTask"; static final String TASK_CLASS_NAME = "akka.dispatch.forkjoin.ForkJoinTask";
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed(TASK_CLASS_NAME); return hasClassesNamed(TASK_CLASS_NAME);
} }

View File

@ -67,8 +67,7 @@ public class ApacheCamelInstrumentationModule extends InstrumentationModule {
private static final class CamelContextInstrumentation implements TypeInstrumentation { private static final class CamelContextInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.apache.camel.CamelContext"); return hasClassesNamed("org.apache.camel.CamelContext");
} }

View File

@ -41,8 +41,7 @@ import org.apache.http.protocol.HttpCoreContext;
final class ApacheHttpAsyncClientInstrumentation implements TypeInstrumentation { final class ApacheHttpAsyncClientInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.apache.http.nio.client.HttpAsyncClient"); return hasClassesNamed("org.apache.http.nio.client.HttpAsyncClient");
} }

View File

@ -30,8 +30,7 @@ import org.apache.http.HttpRequest;
public class ApacheHttpClientRedirectInstrumentation implements TypeInstrumentation { public class ApacheHttpClientRedirectInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.apache.http.client.RedirectStrategy"); return hasClassesNamed("org.apache.http.client.RedirectStrategy");
} }

View File

@ -50,8 +50,7 @@ public class ApacheHttpClientInstrumentationModule extends InstrumentationModule
private static final class HttpClientInstrumentation implements TypeInstrumentation { private static final class HttpClientInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.apache.commons.httpclient.HttpClient"); return hasClassesNamed("org.apache.commons.httpclient.HttpClient");
} }

View File

@ -59,8 +59,7 @@ public class ApacheHttpClientInstrumentationModule extends InstrumentationModule
private static final class HttpClientInstrumentation implements TypeInstrumentation { private static final class HttpClientInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.apache.http.client.HttpClient"); return hasClassesNamed("org.apache.http.client.HttpClient");
} }

View File

@ -21,7 +21,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class ResponseInstrumentation implements TypeInstrumentation { final class ResponseInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("com.ning.http.client.AsyncCompletionHandler"); return hasClassesNamed("com.ning.http.client.AsyncCompletionHandler");
} }

View File

@ -33,7 +33,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class AwsLambdaRequestHandlerInstrumentation implements TypeInstrumentation { final class AwsLambdaRequestHandlerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("com.amazonaws.services.lambda.runtime.RequestHandler"); return hasClassesNamed("com.amazonaws.services.lambda.runtime.RequestHandler");
} }

View File

@ -25,8 +25,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class RequestInstrumentation implements TypeInstrumentation { final class RequestInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("com.amazonaws.AmazonWebServiceRequest"); return hasClassesNamed("com.amazonaws.AmazonWebServiceRequest");
} }

View File

@ -31,8 +31,7 @@ import software.amazon.awssdk.core.internal.http.pipeline.stages.MakeAsyncHttpRe
final class AwsHttpClientInstrumentation implements TypeInstrumentation { final class AwsHttpClientInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed( return hasClassesNamed(
"software.amazon.awssdk.core.internal.http.pipeline.stages.MakeHttpRequestStage"); "software.amazon.awssdk.core.internal.http.pipeline.stages.MakeHttpRequestStage");
} }

View File

@ -30,8 +30,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class CouchbaseNetworkInstrumentation implements TypeInstrumentation { final class CouchbaseNetworkInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("com.couchbase.client.core.endpoint.AbstractGenericHandler"); return hasClassesNamed("com.couchbase.client.core.endpoint.AbstractGenericHandler");
} }

View File

@ -47,8 +47,7 @@ public final class DropwizardViewsInstrumentationModule extends InstrumentationM
private static final class ViewRendererInstrumentation implements TypeInstrumentation { private static final class ViewRendererInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("io.dropwizard.views.ViewRenderer"); return hasClassesNamed("io.dropwizard.views.ViewRenderer");
} }

View File

@ -84,6 +84,7 @@ public final class TraceAnnotationsInstrumentationModule extends Instrumentation
private static final class AnnotatedMethodsInstrumentation implements TypeInstrumentation { private static final class AnnotatedMethodsInstrumentation implements TypeInstrumentation {
private final Set<String> additionalTraceAnnotations; private final Set<String> additionalTraceAnnotations;
private final ElementMatcher.Junction<ClassLoader> classLoaderOptimization;
private final ElementMatcher.Junction<NamedElement> traceAnnotationMatcher; private final ElementMatcher.Junction<NamedElement> traceAnnotationMatcher;
/** This matcher matches all methods that should be excluded from transformation. */ /** This matcher matches all methods that should be excluded from transformation. */
private final ElementMatcher.Junction<MethodDescription> excludedMethodsMatcher; private final ElementMatcher.Junction<MethodDescription> excludedMethodsMatcher;
@ -92,16 +93,21 @@ public final class TraceAnnotationsInstrumentationModule extends Instrumentation
additionalTraceAnnotations = configureAdditionalTraceAnnotations(); additionalTraceAnnotations = configureAdditionalTraceAnnotations();
if (additionalTraceAnnotations.isEmpty()) { if (additionalTraceAnnotations.isEmpty()) {
classLoaderOptimization = none();
traceAnnotationMatcher = none(); traceAnnotationMatcher = none();
} else { } else {
ElementMatcher.Junction<ClassLoader> classLoaderMatcher = null;
ElementMatcher.Junction<NamedElement> methodTraceMatcher = null; ElementMatcher.Junction<NamedElement> methodTraceMatcher = null;
for (String annotationName : additionalTraceAnnotations) { for (String annotationName : additionalTraceAnnotations) {
if (methodTraceMatcher == null) { if (methodTraceMatcher == null) {
classLoaderMatcher = hasClassesNamed(annotationName);
methodTraceMatcher = named(annotationName); methodTraceMatcher = named(annotationName);
} else { } else {
classLoaderMatcher = classLoaderMatcher.or(hasClassesNamed(annotationName));
methodTraceMatcher = methodTraceMatcher.or(named(annotationName)); methodTraceMatcher = methodTraceMatcher.or(named(annotationName));
} }
} }
this.classLoaderOptimization = classLoaderMatcher;
this.traceAnnotationMatcher = methodTraceMatcher; this.traceAnnotationMatcher = methodTraceMatcher;
} }
@ -109,20 +115,8 @@ public final class TraceAnnotationsInstrumentationModule extends Instrumentation
} }
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher. return classLoaderOptimization;
ElementMatcher.Junction<ClassLoader> matcher = null;
for (String name : additionalTraceAnnotations) {
if (matcher == null) {
matcher = hasClassesNamed(name);
} else {
matcher = matcher.or(hasClassesNamed(name));
}
}
if (matcher == null) {
return none();
}
return matcher;
} }
@Override @Override

View File

@ -86,8 +86,7 @@ public class TraceConfigInstrumentationModule extends InstrumentationModule {
} }
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed(className); return hasClassesNamed(className);
} }

View File

@ -54,8 +54,7 @@ public class FinatraInstrumentationModule extends InstrumentationModule {
private static final class RouteInstrumentation implements TypeInstrumentation { private static final class RouteInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("com.twitter.finatra.http.internal.routing.Route"); return hasClassesNamed("com.twitter.finatra.http.internal.routing.Route");
} }

View File

@ -50,8 +50,7 @@ public class GeodeInstrumentationModule extends InstrumentationModule {
private static final class RegionInstrumentation implements TypeInstrumentation { private static final class RegionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// optimization for expensive typeMatcher
return hasClassesNamed("org.apache.geode.cache.Region"); return hasClassesNamed("org.apache.geode.cache.Region");
} }

View File

@ -23,7 +23,7 @@ import net.bytebuddy.matcher.ElementMatchers;
final class FilterInstrumentation implements TypeInstrumentation { final class FilterInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("org.glassfish.grizzly.filterchain.BaseFilter"); return hasClassesNamed("org.glassfish.grizzly.filterchain.BaseFilter");
} }

View File

@ -24,8 +24,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class GrpcClientBuilderBuildInstrumentation implements TypeInstrumentation { final class GrpcClientBuilderBuildInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// optimization for expensive typeMatcher
return hasClassesNamed("io.grpc.ManagedChannelBuilder"); return hasClassesNamed("io.grpc.ManagedChannelBuilder");
} }

View File

@ -29,8 +29,7 @@ import org.hibernate.Criteria;
final class CriteriaInstrumentation implements TypeInstrumentation { final class CriteriaInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.Criteria"); return hasClassesNamed("org.hibernate.Criteria");
} }

View File

@ -28,8 +28,7 @@ import org.hibernate.Query;
final class QueryInstrumentation implements TypeInstrumentation { final class QueryInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.Query"); return hasClassesNamed("org.hibernate.Query");
} }

View File

@ -34,8 +34,7 @@ import org.hibernate.StatelessSession;
final class SessionFactoryInstrumentation implements TypeInstrumentation { final class SessionFactoryInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.SessionFactory"); return hasClassesNamed("org.hibernate.SessionFactory");
} }

View File

@ -41,8 +41,7 @@ import org.hibernate.Transaction;
final class SessionInstrumentation implements TypeInstrumentation { final class SessionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.Session", "org.hibernate.StatelessSession"); return hasClassesNamed("org.hibernate.Session", "org.hibernate.StatelessSession");
} }

View File

@ -28,8 +28,7 @@ import org.hibernate.Transaction;
final class TransactionInstrumentation implements TypeInstrumentation { final class TransactionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.Transaction"); return hasClassesNamed("org.hibernate.Transaction");
} }

View File

@ -29,8 +29,7 @@ import org.hibernate.Criteria;
final class CriteriaInstrumentation implements TypeInstrumentation { final class CriteriaInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.Criteria"); return hasClassesNamed("org.hibernate.Criteria");
} }

View File

@ -28,8 +28,7 @@ import org.hibernate.Query;
final class QueryInstrumentation implements TypeInstrumentation { final class QueryInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.Query"); return hasClassesNamed("org.hibernate.Query");
} }

View File

@ -32,8 +32,7 @@ import org.hibernate.SharedSessionContract;
final class SessionFactoryInstrumentation implements TypeInstrumentation { final class SessionFactoryInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.SessionFactory"); return hasClassesNamed("org.hibernate.SessionFactory");
} }

View File

@ -40,8 +40,7 @@ import org.hibernate.Transaction;
final class SessionInstrumentation implements TypeInstrumentation { final class SessionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.SharedSessionContract"); return hasClassesNamed("org.hibernate.SharedSessionContract");
} }

View File

@ -28,8 +28,7 @@ import org.hibernate.Transaction;
final class TransactionInstrumentation implements TypeInstrumentation { final class TransactionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.Transaction"); return hasClassesNamed("org.hibernate.Transaction");
} }

View File

@ -27,8 +27,7 @@ import org.hibernate.procedure.ProcedureCall;
final class ProcedureCallInstrumentation implements TypeInstrumentation { final class ProcedureCallInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.procedure.ProcedureCall"); return hasClassesNamed("org.hibernate.procedure.ProcedureCall");
} }

View File

@ -29,8 +29,7 @@ import org.hibernate.procedure.ProcedureCall;
final class SessionInstrumentation implements TypeInstrumentation { final class SessionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.hibernate.SharedSessionContract"); return hasClassesNamed("org.hibernate.SharedSessionContract");
} }

View File

@ -57,8 +57,7 @@ public class HystrixInstrumentationModule extends InstrumentationModule {
private static final class HystrixCommandInstrumentation implements TypeInstrumentation { private static final class HystrixCommandInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed( return hasClassesNamed(
"com.netflix.hystrix.HystrixCommand", "com.netflix.hystrix.HystrixObservableCommand"); "com.netflix.hystrix.HystrixCommand", "com.netflix.hystrix.HystrixObservableCommand");
} }

View File

@ -33,8 +33,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class HttpClientInstrumentation implements TypeInstrumentation { final class HttpClientInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("java.net.http.HttpClient"); return hasClassesNamed("java.net.http.HttpClient");
} }

View File

@ -52,8 +52,7 @@ public final class JaxRsClientInstrumentationModule extends InstrumentationModul
private static final class ClientHandlerInstrumentation implements TypeInstrumentation { private static final class ClientHandlerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("com.sun.jersey.api.client.ClientHandler"); return hasClassesNamed("com.sun.jersey.api.client.ClientHandler");
} }

View File

@ -49,8 +49,7 @@ public final class JaxRsClientInstrumentationModule extends InstrumentationModul
private static final class ClientBuilderInstrumentation implements TypeInstrumentation { private static final class ClientBuilderInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.ws.rs.client.ClientBuilder"); return hasClassesNamed("javax.ws.rs.client.ClientBuilder");
} }

View File

@ -31,8 +31,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class JaxRsAnnotationsInstrumentation implements TypeInstrumentation { final class JaxRsAnnotationsInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.ws.rs.Path"); return hasClassesNamed("javax.ws.rs.Path");
} }

View File

@ -21,8 +21,7 @@ import net.bytebuddy.matcher.ElementMatcher;
public abstract class AbstractRequestContextInstrumentation implements TypeInstrumentation { public abstract class AbstractRequestContextInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.ws.rs.container.ContainerRequestContext"); return hasClassesNamed("javax.ws.rs.container.ContainerRequestContext");
} }

View File

@ -29,8 +29,7 @@ import net.bytebuddy.matcher.ElementMatcher;
class ContainerRequestFilterInstrumentation implements TypeInstrumentation { class ContainerRequestFilterInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.ws.rs.container.ContainerRequestFilter"); return hasClassesNamed("javax.ws.rs.container.ContainerRequestFilter");
} }

View File

@ -35,8 +35,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class JaxRsAnnotationsInstrumentation implements TypeInstrumentation { final class JaxRsAnnotationsInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.ws.rs.Path"); return hasClassesNamed("javax.ws.rs.Path");
} }

View File

@ -27,8 +27,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class JaxRsAsyncResponseInstrumentation implements TypeInstrumentation { final class JaxRsAsyncResponseInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.ws.rs.container.AsyncResponse"); return hasClassesNamed("javax.ws.rs.container.AsyncResponse");
} }

View File

@ -26,7 +26,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class ConnectionInstrumentation implements TypeInstrumentation { final class ConnectionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("java.sql.Connection"); return hasClassesNamed("java.sql.Connection");
} }

View File

@ -25,7 +25,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class DriverInstrumentation implements TypeInstrumentation { final class DriverInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("java.sql.Driver"); return hasClassesNamed("java.sql.Driver");
} }

View File

@ -28,7 +28,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class PreparedStatementInstrumentation implements TypeInstrumentation { final class PreparedStatementInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("java.sql.PreparedStatement"); return hasClassesNamed("java.sql.PreparedStatement");
} }

View File

@ -28,7 +28,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class StatementInstrumentation implements TypeInstrumentation { final class StatementInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("java.sql.Statement"); return hasClassesNamed("java.sql.Statement");
} }

View File

@ -50,8 +50,7 @@ public final class JettyInstrumentationModule extends InstrumentationModule {
private static final class HandlerInstrumentation implements TypeInstrumentation { private static final class HandlerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.eclipse.jetty.server.Handler"); return hasClassesNamed("org.eclipse.jetty.server.Handler");
} }

View File

@ -27,8 +27,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class JmsMessageConsumerInstrumentation implements TypeInstrumentation { final class JmsMessageConsumerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.jms.MessageConsumer"); return hasClassesNamed("javax.jms.MessageConsumer");
} }

View File

@ -26,8 +26,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class JmsMessageListenerInstrumentation implements TypeInstrumentation { final class JmsMessageListenerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.jms.MessageListener"); return hasClassesNamed("javax.jms.MessageListener");
} }

View File

@ -30,8 +30,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class JmsMessageProducerInstrumentation implements TypeInstrumentation { final class JmsMessageProducerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.jms.MessageProducer"); return hasClassesNamed("javax.jms.MessageProducer");
} }

View File

@ -25,8 +25,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class JmsSessionInstrumentation implements TypeInstrumentation { final class JmsSessionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.jms.Session"); return hasClassesNamed("javax.jms.Session");
} }

View File

@ -27,8 +27,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class HttpJspPageInstrumentation implements TypeInstrumentation { final class HttpJspPageInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.servlet.jsp.HttpJspPage"); return hasClassesNamed("javax.servlet.jsp.HttpJspPage");
} }

View File

@ -48,7 +48,7 @@ public class KHttpInstrumentationModule extends InstrumentationModule {
private static final class KHttpInstrumentation implements TypeInstrumentation { private static final class KHttpInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("khttp.KHttp"); return hasClassesNamed("khttp.KHttp");
} }

View File

@ -51,8 +51,7 @@ public class KubernetesClientInstrumentationModule extends InstrumentationModule
private static final class ApiClientInstrumentation implements TypeInstrumentation { private static final class ApiClientInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("io.kubernetes.client.openapi.ApiClient"); return hasClassesNamed("io.kubernetes.client.openapi.ApiClient");
} }

View File

@ -31,8 +31,7 @@ import org.jboss.netty.channel.ChannelFuture;
final class ChannelFutureListenerInstrumentation implements TypeInstrumentation { final class ChannelFutureListenerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.jboss.netty.channel.ChannelFutureListener"); return hasClassesNamed("org.jboss.netty.channel.ChannelFutureListener");
} }

View File

@ -28,8 +28,7 @@ import org.jboss.netty.channel.Channel;
final class NettyChannelInstrumentation implements TypeInstrumentation { final class NettyChannelInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.jboss.netty.channel.Channel"); return hasClassesNamed("org.jboss.netty.channel.Channel");
} }

View File

@ -41,8 +41,7 @@ import org.jboss.netty.handler.codec.http.HttpServerCodec;
final class NettyChannelPipelineInstrumentation implements TypeInstrumentation { final class NettyChannelPipelineInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.jboss.netty.channel.ChannelPipeline"); return hasClassesNamed("org.jboss.netty.channel.ChannelPipeline");
} }

View File

@ -28,8 +28,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class ChannelFutureListenerInstrumentation implements TypeInstrumentation { final class ChannelFutureListenerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("io.netty.channel.ChannelFutureListener"); return hasClassesNamed("io.netty.channel.ChannelFutureListener");
} }

View File

@ -42,8 +42,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class NettyChannelPipelineInstrumentation implements TypeInstrumentation { final class NettyChannelPipelineInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("io.netty.channel.ChannelPipeline"); return hasClassesNamed("io.netty.channel.ChannelPipeline");
} }

View File

@ -28,8 +28,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class ChannelFutureListenerInstrumentation implements TypeInstrumentation { final class ChannelFutureListenerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("io.netty.channel.ChannelFutureListener"); return hasClassesNamed("io.netty.channel.ChannelFutureListener");
} }

View File

@ -42,8 +42,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class NettyChannelPipelineInstrumentation implements TypeInstrumentation { final class NettyChannelPipelineInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("io.netty.channel.ChannelPipeline"); return hasClassesNamed("io.netty.channel.ChannelPipeline");
} }

View File

@ -52,7 +52,7 @@ public class OshiInstrumentationModule extends InstrumentationModule {
private static final class SystemInfoInstrumentation implements TypeInstrumentation { private static final class SystemInfoInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("oshi.SystemInfo"); return hasClassesNamed("oshi.SystemInfo");
} }

View File

@ -29,8 +29,7 @@ public class AsyncHttpClientInstrumentation implements TypeInstrumentation {
} }
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient"); return hasClassesNamed("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient");
} }

View File

@ -41,8 +41,7 @@ public final class PlayInstrumentationModule extends InstrumentationModule {
private static final class ActionInstrumentation implements TypeInstrumentation { private static final class ActionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("play.api.mvc.Action"); return hasClassesNamed("play.api.mvc.Action");
} }

View File

@ -41,8 +41,7 @@ public final class PlayInstrumentationModule extends InstrumentationModule {
private static final class ActionInstrumentation implements TypeInstrumentation { private static final class ActionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("play.api.mvc.Action"); return hasClassesNamed("play.api.mvc.Action");
} }

View File

@ -41,8 +41,7 @@ public final class PlayInstrumentationModule extends InstrumentationModule {
private static final class ActionInstrumentation implements TypeInstrumentation { private static final class ActionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("play.api.mvc.Action"); return hasClassesNamed("play.api.mvc.Action");
} }

View File

@ -45,8 +45,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class RabbitChannelInstrumentation implements TypeInstrumentation { final class RabbitChannelInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("com.rabbitmq.client.Channel"); return hasClassesNamed("com.rabbitmq.client.Channel");
} }

View File

@ -25,8 +25,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class RabbitCommandInstrumentation implements TypeInstrumentation { final class RabbitCommandInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("com.rabbitmq.client.Command"); return hasClassesNamed("com.rabbitmq.client.Command");
} }

View File

@ -23,8 +23,7 @@ import ratpack.func.Block;
final class ContinuationInstrumentation implements TypeInstrumentation { final class ContinuationInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("ratpack.exec.internal.Continuation"); return hasClassesNamed("ratpack.exec.internal.Continuation");
} }

View File

@ -22,8 +22,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class ServerErrorHandlerInstrumentation implements TypeInstrumentation { final class ServerErrorHandlerInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("ratpack.error.ServerErrorHandler"); return hasClassesNamed("ratpack.error.ServerErrorHandler");
} }

View File

@ -56,7 +56,7 @@ public final class RediscalaInstrumentationModule extends InstrumentationModule
private static final class RequestInstrumentation implements TypeInstrumentation { private static final class RequestInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("redis.Request"); return hasClassesNamed("redis.Request");
} }

View File

@ -39,8 +39,7 @@ final class ScalaForkJoinTaskInstrumentation implements TypeInstrumentation {
static final String TASK_CLASS_NAME = "scala.concurrent.forkjoin.ForkJoinTask"; static final String TASK_CLASS_NAME = "scala.concurrent.forkjoin.ForkJoinTask";
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed(TASK_CLASS_NAME); return hasClassesNamed(TASK_CLASS_NAME);
} }

View File

@ -37,7 +37,7 @@ import net.bytebuddy.matcher.ElementMatcher;
*/ */
final class HttpServletResponseInstrumentation implements TypeInstrumentation { final class HttpServletResponseInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("javax.servlet.http.HttpServletResponse"); return hasClassesNamed("javax.servlet.http.HttpServletResponse");
} }

View File

@ -22,8 +22,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class ServletAndFilterInstrumentation implements TypeInstrumentation { final class ServletAndFilterInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.servlet.http.HttpServlet"); return hasClassesNamed("javax.servlet.http.HttpServlet");
} }

View File

@ -29,8 +29,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class AsyncContextInstrumentation implements TypeInstrumentation { final class AsyncContextInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.servlet.AsyncContext"); return hasClassesNamed("javax.servlet.AsyncContext");
} }

View File

@ -21,8 +21,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class ServletAndFilterInstrumentation implements TypeInstrumentation { final class ServletAndFilterInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.servlet.Filter"); return hasClassesNamed("javax.servlet.Filter");
} }

View File

@ -60,8 +60,7 @@ public final class RequestDispatcherInstrumentationModule extends Instrumentatio
private static final class RequestDispatcherInstrumentation implements TypeInstrumentation { private static final class RequestDispatcherInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.servlet.RequestDispatcher"); return hasClassesNamed("javax.servlet.RequestDispatcher");
} }

View File

@ -50,8 +50,7 @@ public final class HttpServletResponseInstrumentationModule extends Instrumentat
private static final class HttpServletResponseInstrumentation implements TypeInstrumentation { private static final class HttpServletResponseInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("javax.servlet.http.HttpServletResponse"); return hasClassesNamed("javax.servlet.http.HttpServletResponse");
} }

View File

@ -47,8 +47,7 @@ public class WebfluxClientInstrumentationModule extends InstrumentationModule {
private static final class WebClientBuilderInstrumentation implements TypeInstrumentation { private static final class WebClientBuilderInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.springframework.web.reactive.function.client.WebClient"); return hasClassesNamed("org.springframework.web.reactive.function.client.WebClient");
} }

View File

@ -25,8 +25,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class HandlerAdapterInstrumentation implements TypeInstrumentation { final class HandlerAdapterInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.springframework.web.reactive.HandlerAdapter"); return hasClassesNamed("org.springframework.web.reactive.HandlerAdapter");
} }

View File

@ -25,8 +25,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class RouterFunctionInstrumentation implements TypeInstrumentation { final class RouterFunctionInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.springframework.web.reactive.function.server.ServerRequest"); return hasClassesNamed("org.springframework.web.reactive.function.server.ServerRequest");
} }

View File

@ -32,8 +32,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class HandlerAdapterInstrumentation implements TypeInstrumentation { final class HandlerAdapterInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("org.springframework.web.servlet.HandlerAdapter"); return hasClassesNamed("org.springframework.web.servlet.HandlerAdapter");
} }

View File

@ -29,8 +29,7 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
final class WebApplicationContextInstrumentation implements TypeInstrumentation { final class WebApplicationContextInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed( return hasClassesNamed(
"org.springframework.context.support.AbstractApplicationContext", "org.springframework.context.support.AbstractApplicationContext",
"org.springframework.web.context.WebApplicationContext"); "org.springframework.web.context.WebApplicationContext");

View File

@ -21,7 +21,7 @@ import net.bytebuddy.matcher.ElementMatcher;
public class ActionInvocationInstrumentation implements TypeInstrumentation { public class ActionInvocationInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("com.opensymphony.xwork2.ActionInvocation"); return hasClassesNamed("com.opensymphony.xwork2.ActionInvocation");
} }

View File

@ -36,8 +36,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class TwilioAsyncInstrumentation implements TypeInstrumentation { final class TwilioAsyncInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("com.twilio.Twilio"); return hasClassesNamed("com.twilio.Twilio");
} }

View File

@ -31,8 +31,7 @@ import net.bytebuddy.matcher.ElementMatcher;
final class TwilioSyncInstrumentation implements TypeInstrumentation { final class TwilioSyncInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Optimization for expensive typeMatcher.
return hasClassesNamed("com.twilio.Twilio"); return hasClassesNamed("com.twilio.Twilio");
} }

View File

@ -48,7 +48,7 @@ public class VertxRxInstrumentationModule extends InstrumentationModule {
private static final class AsyncResultSingleInstrumentation implements TypeInstrumentation { private static final class AsyncResultSingleInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
// Different versions of Vert.x has this class in different packages // Different versions of Vert.x has this class in different packages
return hasClassesNamed("io.vertx.reactivex.core.impl.AsyncResultSingle") return hasClassesNamed("io.vertx.reactivex.core.impl.AsyncResultSingle")
.or(hasClassesNamed("io.vertx.reactivex.impl.AsyncResultSingle")); .or(hasClassesNamed("io.vertx.reactivex.impl.AsyncResultSingle"));

View File

@ -48,7 +48,7 @@ public final class VertxWebInstrumentationModule extends InstrumentationModule {
private static final class RouteInstrumentation implements TypeInstrumentation { private static final class RouteInstrumentation implements TypeInstrumentation {
@Override @Override
public ElementMatcher<ClassLoader> classLoaderMatcher() { public ElementMatcher<ClassLoader> classLoaderOptimization() {
return hasClassesNamed("io.vertx.ext.web.Route"); return hasClassesNamed("io.vertx.ext.web.Route");
} }

View File

@ -141,7 +141,7 @@ public abstract class InstrumentationModule {
typeInstrumentation.typeMatcher(), typeInstrumentation.typeMatcher(),
"Instrumentation type matcher unexpected exception: " + getClass().getName()), "Instrumentation type matcher unexpected exception: " + getClass().getName()),
failSafe( failSafe(
moduleClassLoaderMatcher.and(typeInstrumentation.classLoaderMatcher()), moduleClassLoaderMatcher.and(typeInstrumentation.classLoaderOptimization()),
"Instrumentation class loader matcher unexpected exception: " "Instrumentation class loader matcher unexpected exception: "
+ getClass().getName())) + getClass().getName()))
.and(NOT_DECORATOR_MATCHER) .and(NOT_DECORATOR_MATCHER)

View File

@ -12,20 +12,36 @@ import java.util.Map;
import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;
import net.bytebuddy.matcher.ElementMatchers;
/** /**
* Interface representing a single type instrumentation. Part of an {@link InstrumentationModule}. * Interface representing a single type instrumentation. Part of an {@link InstrumentationModule}.
*/ */
public interface TypeInstrumentation { public interface TypeInstrumentation {
/** /**
* A type instrumentation can implement this method to optimize an expensive {@link * An optimization to short circuit matching in the case where the instrumented library is not
* #typeMatcher()} - usually {@link AgentElementMatchers#implementsInterface(ElementMatcher)} or * even present on the class path.
* {@link AgentElementMatchers#extendsClass(ElementMatcher)}. In that case it's useful to check
* that the classloader contains the class/interface that is being extended.
* *
* @return A type matcher used to match the classloader under transform * <p>Most applications have only a small subset of libraries on their class path, so this ends up
* being a very useful optimization.
*
* <p>Some background on type matcher performance:
*
* <p>Type matchers that only match against the type name are fast, e.g. {@link
* ElementMatchers#named(String)}.
*
* <p>All other type matchers require some level of bytecode inspection, e.g. {@link
* ElementMatchers#isAnnotatedWith(ElementMatcher)}.
*
* <p>Type matchers that need to inspect the super class hierarchy are even more expensive, e.g.
* {@link AgentElementMatchers#implementsInterface(ElementMatcher)}. This is because they require
* inspecting multiple super classes/interfaces as well (which may not even be loaded yet in which
* case their bytecode has to be read and inspected).
*
* @return A type matcher that rejects classloaders that do not contain desired interfaces or base
* classes.
*/ */
default ElementMatcher<ClassLoader> classLoaderMatcher() { default ElementMatcher<ClassLoader> classLoaderOptimization() {
return any(); return any();
} }