Use more efficient namedOneOf where possible (#3200)
* Use more efficient namedOneOf where possible * Fix - hasClassesNamed does and not or
This commit is contained in:
parent
5faa39b597
commit
cefaecab3f
|
@ -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));
|
||||
}
|
||||
classLoaderMatcher = classLoaderMatcher.or(hasClassesNamed(annotationName));
|
||||
}
|
||||
this.classLoaderOptimization = classLoaderMatcher;
|
||||
this.traceAnnotationMatcher = methodTraceMatcher;
|
||||
this.traceAnnotationMatcher = namedOneOf(additionalTraceAnnotations.toArray(new String[0]));
|
||||
}
|
||||
|
||||
excludedMethodsMatcher = configureExcludedMethods();
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue