Use more efficient namedOneOf where possible (#3200)

* Use more efficient namedOneOf where possible

* Fix - hasClassesNamed does and not or
This commit is contained in:
Trask Stalnaker 2021-06-06 19:41:34 -07:00 committed by GitHub
parent 5faa39b597
commit cefaecab3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 53 additions and 52 deletions

View File

@ -11,7 +11,7 @@ import static io.opentelemetry.javaagent.instrumentation.extannotations.External
import static net.bytebuddy.matcher.ElementMatchers.declaresMethod;
import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith;
import static net.bytebuddy.matcher.ElementMatchers.isDeclaredBy;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.none;
import static net.bytebuddy.matcher.ElementMatchers.not;
@ -82,18 +82,11 @@ public class ExternalAnnotationInstrumentation implements TypeInstrumentation {
traceAnnotationMatcher = none();
} else {
ElementMatcher.Junction<ClassLoader> classLoaderMatcher = none();
ElementMatcher.Junction<NamedElement> methodTraceMatcher = none();
for (String annotationName : additionalTraceAnnotations) {
if (methodTraceMatcher == null) {
classLoaderMatcher = hasClassesNamed(annotationName);
methodTraceMatcher = named(annotationName);
} else {
classLoaderMatcher = classLoaderMatcher.or(hasClassesNamed(annotationName));
methodTraceMatcher = methodTraceMatcher.or(named(annotationName));
}
}
this.classLoaderOptimization = classLoaderMatcher;
this.traceAnnotationMatcher = methodTraceMatcher;
this.traceAnnotationMatcher = namedOneOf(additionalTraceAnnotations.toArray(new String[0]));
}
excludedMethodsMatcher = configureExcludedMethods();

View File

@ -12,6 +12,7 @@ import static io.opentelemetry.javaagent.instrumentation.geode.GeodeInstrumenter
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.context.Context;
@ -40,22 +41,23 @@ public class GeodeRegionInstrumentation implements TypeInstrumentation {
transformer.applyAdviceToMethod(
isMethod()
.and(
named("clear")
namedOneOf(
"clear",
"create",
"destroy",
"entrySet",
"get",
"getAll",
"invalidate",
"replace")
.or(nameStartsWith("contains"))
.or(named("create"))
.or(named("destroy"))
.or(named("entrySet"))
.or(named("get"))
.or(named("getAll"))
.or(named("invalidate"))
.or(nameStartsWith("keySet"))
.or(nameStartsWith("put"))
.or(nameStartsWith("remove"))
.or(named("replace"))),
.or(nameStartsWith("remove"))),
this.getClass().getName() + "$SimpleAdvice");
transformer.applyAdviceToMethod(
isMethod()
.and(named("existsValue").or(named("query")).or(named("selectValue")))
.and(namedOneOf("existsValue", "query", "selectValue"))
.and(takesArgument(0, String.class)),
this.getClass().getName() + "$QueryAdvice");
}

View File

@ -8,6 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.jaxrsclient.v2_0;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -35,7 +36,7 @@ public class JerseyClientConnectionErrorInstrumentation implements TypeInstrumen
this.getClass().getName() + "$InvokeAdvice");
transformer.applyAdviceToMethod(
isMethod()
.and(named("submit").or(named("createRunnableForAsyncProcessing")))
.and(namedOneOf("submit", "createRunnableForAsyncProcessing"))
.and(takesArgument(0, named("org.glassfish.jersey.client.ClientRequest")))
.and(takesArgument(1, named("org.glassfish.jersey.client.ResponseCallback"))),
this.getClass().getName() + "$SubmitAdvice");

View File

@ -6,6 +6,7 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -29,8 +30,9 @@ public class JerseyResourceMethodDispatcherInstrumentation implements TypeInstru
.and(
takesArgument(
1,
named("javax.ws.rs.core.Request")
.or(named("org.glassfish.jersey.server.ContainerRequest")))),
namedOneOf(
"javax.ws.rs.core.Request",
"org.glassfish.jersey.server.ContainerRequest"))),
JerseyResourceMethodDispatcherInstrumentation.class.getName() + "$DispatchAdvice");
}

View File

@ -6,6 +6,7 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -33,8 +34,9 @@ public class ResteasyRootNodeTypeInstrumentation implements TypeInstrumentation
.and(
takesArgument(
1,
named("org.jboss.resteasy.core.ResourceInvoker")
.or(named("org.jboss.resteasy.spi.ResourceInvoker")))),
namedOneOf(
"org.jboss.resteasy.core.ResourceInvoker",
"org.jboss.resteasy.spi.ResourceInvoker"))),
ResteasyRootNodeTypeInstrumentation.class.getName() + "$AddInvokerAdvice");
}

View File

@ -6,6 +6,7 @@
package io.opentelemetry.javaagent.instrumentation.kotlinxcoroutines;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -24,13 +25,11 @@ public class KotlinCoroutinesInstrumentation implements TypeInstrumentation {
@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
named("launch")
.or(named("launch$default"))
namedOneOf("launch", "launch$default")
.and(takesArgument(1, named("kotlin.coroutines.CoroutineContext"))),
this.getClass().getName() + "$LaunchAdvice");
transformer.applyAdviceToMethod(
named("runBlocking")
.or(named("runBlocking$default"))
namedOneOf("runBlocking", "runBlocking$default")
.and(takesArgument(0, named("kotlin.coroutines.CoroutineContext"))),
this.getClass().getName() + "$RunBlockingAdvice");
}

View File

@ -13,6 +13,7 @@ import static io.opentelemetry.javaagent.extension.matcher.ClassLoaderMatcher.ha
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import ch.qos.logback.classic.spi.ILoggingEvent;
@ -45,7 +46,7 @@ public class LoggingEventInstrumentation implements TypeInstrumentation {
transformer.applyAdviceToMethod(
isMethod()
.and(isPublic())
.and(named("getMDCPropertyMap").or(named("getMdc")))
.and(namedOneOf("getMDCPropertyMap", "getMdc"))
.and(takesArguments(0)),
LoggingEventInstrumentation.class.getName() + "$GetMdcAdvice");
}

View File

@ -10,6 +10,7 @@ import static io.opentelemetry.javaagent.extension.matcher.ClassLoaderMatcher.ha
import static io.opentelemetry.javaagent.instrumentation.api.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumenters.instrumenter;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
@ -18,7 +19,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import java.lang.reflect.Method;
import java.util.Set;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
@ -43,17 +43,9 @@ public class MethodInstrumentation implements TypeInstrumentation {
@Override
public void transform(TypeTransformer transformer) {
ElementMatcher.Junction<MethodDescription> methodMatchers = null;
for (String methodName : methodNames) {
if (methodMatchers == null) {
methodMatchers = named(methodName);
} else {
methodMatchers = methodMatchers.or(named(methodName));
}
}
transformer.applyAdviceToMethod(
methodMatchers, MethodInstrumentation.class.getName() + "$MethodAdvice");
namedOneOf(methodNames.toArray(new String[0])),
MethodInstrumentation.class.getName() + "$MethodAdvice");
}
public static class MethodAdvice {

View File

@ -8,6 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.mongo.v3_7;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import com.mongodb.async.SingleResultCallback;
@ -22,8 +23,8 @@ final class BaseClusterInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<TypeDescription> typeMatcher() {
return named("com.mongodb.connection.BaseCluster")
.or(named("com.mongodb.internal.connection.BaseCluster"));
return namedOneOf(
"com.mongodb.connection.BaseCluster", "com.mongodb.internal.connection.BaseCluster");
}
@Override

View File

@ -8,6 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_0;
import static io.opentelemetry.javaagent.instrumentation.netty.v4_0.server.NettyHttpServerTracer.tracer;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -22,8 +23,9 @@ public class AbstractChannelHandlerContextInstrumentation implements TypeInstrum
@Override
public ElementMatcher<TypeDescription> typeMatcher() {
// Different classes depending on Netty version
return named("io.netty.channel.AbstractChannelHandlerContext")
.or(named("io.netty.channel.DefaultChannelHandlerContext"));
return namedOneOf(
"io.netty.channel.AbstractChannelHandlerContext",
"io.netty.channel.DefaultChannelHandlerContext");
}
@Override

View File

@ -9,6 +9,7 @@ import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.
import static io.opentelemetry.javaagent.extension.matcher.ClassLoaderMatcher.hasClassesNamed;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import io.netty.channel.Channel;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -38,7 +39,7 @@ public class ChannelInstrumentation implements TypeInstrumentation {
@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
isMethod().and(named("write").or(named("writeAndFlush"))),
isMethod().and(namedOneOf("write", "writeAndFlush")),
ChannelInstrumentation.class.getName() + "$AttachContextAdvice");
}

View File

@ -9,6 +9,7 @@ import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.
import static io.opentelemetry.javaagent.extension.matcher.ClassLoaderMatcher.hasClassesNamed;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import io.netty.channel.Channel;
import io.opentelemetry.instrumentation.netty.v4_1.AttributeKeys;
@ -39,7 +40,7 @@ public class ChannelInstrumentation implements TypeInstrumentation {
@Override
public void transform(TypeTransformer transformer) {
transformer.applyAdviceToMethod(
isMethod().and(named("write").or(named("writeAndFlush"))),
isMethod().and(namedOneOf("write", "writeAndFlush")),
ChannelInstrumentation.class.getName() + "$AttachContextAdvice");
}

View File

@ -7,6 +7,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.batch.chunk;
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -24,10 +25,11 @@ public class StepBuilderInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<TypeDescription> typeMatcher() {
// Spring Batch Java DSL and XML config
return named("org.springframework.batch.core.step.builder.AbstractTaskletStepBuilder")
return namedOneOf(
"org.springframework.batch.core.step.builder.AbstractTaskletStepBuilder",
// JSR-352 XML config
.or(named("org.springframework.batch.core.jsr.step.builder.JsrSimpleStepBuilder"))
.or(named("org.springframework.batch.core.jsr.step.builder.JsrBatchletStepBuilder"));
"org.springframework.batch.core.jsr.step.builder.JsrSimpleStepBuilder",
"org.springframework.batch.core.jsr.step.builder.JsrBatchletStepBuilder");
}
@Override

View File

@ -8,6 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.vertx.reactive;
import static io.opentelemetry.javaagent.extension.matcher.ClassLoaderMatcher.hasClassesNamed;
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -31,8 +32,9 @@ public class AsyncResultSingleInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher<TypeDescription> typeMatcher() {
return named("io.vertx.reactivex.core.impl.AsyncResultSingle")
.or(named("io.vertx.reactivex.impl.AsyncResultSingle"));
return namedOneOf(
"io.vertx.reactivex.core.impl.AsyncResultSingle",
"io.vertx.reactivex.impl.AsyncResultSingle");
}
@Override