diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ClassLoaderMatcher.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ClassLoaderMatcher.java index 091220acd4..e286b8628c 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ClassLoaderMatcher.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ClassLoaderMatcher.java @@ -8,6 +8,7 @@ import net.bytebuddy.matcher.ElementMatcher; @Slf4j public final class ClassLoaderMatcher { public static final ClassLoader BOOTSTRAP_CLASSLOADER = null; + public static final int CACHE_MAX_SIZE = 25; // limit number of cached responses for each matcher. public static final int CACHE_CONCURRENCY = Math.max(8, Runtime.getRuntime().availableProcessors()); @@ -20,9 +21,16 @@ public final class ClassLoaderMatcher { return SkipClassLoaderMatcher.INSTANCE; } - public static ElementMatcher.Junction.AbstractBase classLoaderHasNoResources( - final String... resources) { - return new ClassLoaderHasNoResourceMatcher(resources); + /** + * NOTICE: Does not match the bootstrap classpath. Don't use with classes expected to be on the + * bootstrap. + * + * @param classNames list of names to match. returns true if empty. + * @return true if class is available as a resource and not the bootstrap classloader. + */ + public static ElementMatcher.Junction.AbstractBase hasClassesNamed( + final String... classNames) { + return new ClassLoaderHasClassesNamedMatcher(classNames); } private static final class SkipClassLoaderMatcher @@ -57,38 +65,47 @@ public final class ClassLoaderMatcher { } } - private static class ClassLoaderHasNoResourceMatcher + private static class ClassLoaderHasClassesNamedMatcher extends ElementMatcher.Junction.AbstractBase { + private final Cache cache = - CacheBuilder.newBuilder().weakKeys().concurrencyLevel(CACHE_CONCURRENCY).build(); + CacheBuilder.newBuilder() + .weakKeys() + .maximumSize(CACHE_MAX_SIZE) + .concurrencyLevel(CACHE_CONCURRENCY) + .build(); private final String[] resources; - private ClassLoaderHasNoResourceMatcher(final String... resources) { - this.resources = resources; + private ClassLoaderHasClassesNamedMatcher(final String... classNames) { + resources = classNames; + for (int i = 0; i < resources.length; i++) { + resources[i] = resources[i].replace(".", "/") + ".class"; + } } - private boolean hasNoResources(final ClassLoader cl) { + private boolean hasResources(final ClassLoader cl) { for (final String resource : resources) { if (cl.getResource(resource) == null) { - return true; + return false; } } - return false; + return true; } @Override public boolean matches(final ClassLoader cl) { - if (cl == null) { + if (cl == BOOTSTRAP_CLASSLOADER) { + // Can't match the bootstrap classloader. return false; } - Boolean v = cache.getIfPresent(cl); - if (v != null) { - return v; + final Boolean cached; + if ((cached = cache.getIfPresent(cl)) != null) { + return cached; } - v = hasNoResources(cl); - cache.put(cl, v); - return v; + final boolean value = hasResources(cl); + cache.put(cl, value); + return value; } } } diff --git a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientInstrumentation.java b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientInstrumentation.java index 6b121106d0..00a6797513 100644 --- a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientInstrumentation.java +++ b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.apachehttpasyncclient; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -10,7 +10,6 @@ import static datadog.trace.instrumentation.apachehttpasyncclient.HttpHeadersInj import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; @@ -43,7 +42,7 @@ public class ApacheHttpAsyncClientInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("org/apache/http/nio/client/HttpAsyncClient.class")); + return hasClassesNamed("org.apache.http.nio.client.HttpAsyncClient"); } @Override diff --git a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/ApacheHttpClientRedirectInstrumentation.java b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/ApacheHttpClientRedirectInstrumentation.java index e49ac1803c..3968932216 100644 --- a/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/ApacheHttpClientRedirectInstrumentation.java +++ b/dd-java-agent/instrumentation/apache-httpasyncclient-4/src/main/java/datadog/trace/instrumentation/apachehttpasyncclient/ApacheHttpClientRedirectInstrumentation.java @@ -1,11 +1,10 @@ package datadog.trace.instrumentation.apachehttpasyncclient; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -34,7 +33,7 @@ public class ApacheHttpClientRedirectInstrumentation extends Instrumenter.Defaul @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("org/apache/http/client/RedirectStrategy.class")); + return hasClassesNamed("org.apache.http.client.RedirectStrategy"); } @Override diff --git a/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java b/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java index c4b5ed51e5..acc7da0f1a 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/apache-httpclient-4/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.apachehttpclient; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -45,7 +45,7 @@ public class ApacheHttpClientInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("org/apache/http/client/HttpClient.class")); + return hasClassesNamed("org.apache.http.client.HttpClient"); } @Override diff --git a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/RequestInstrumentation.java b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/RequestInstrumentation.java index 3706ba8503..f9cc3209c8 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/RequestInstrumentation.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/RequestInstrumentation.java @@ -1,11 +1,10 @@ package datadog.trace.instrumentation.aws.v0; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.amazonaws.AmazonWebServiceRequest; @@ -30,7 +29,7 @@ public final class RequestInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("com/amazonaws/AmazonWebServiceRequest.class")); + return hasClassesNamed("com.amazonaws.AmazonWebServiceRequest"); } @Override diff --git a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsClientInstrumentation.java b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsClientInstrumentation.java index 77a1c6ec15..eaeaaaa01d 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsClientInstrumentation.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsClientInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.aws.v2; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -20,6 +21,12 @@ import software.amazon.awssdk.core.client.builder.SdkClientBuilder; @AutoService(Instrumenter.class) public final class AwsClientInstrumentation extends AbstractAwsClientInstrumentation { + @Override + public ElementMatcher classLoaderMatcher() { + // Optimization for expensive typeMatcher. + return hasClassesNamed("software.amazon.awssdk.core.client.builder.SdkClientBuilder"); + } + @Override public ElementMatcher typeMatcher() { return nameStartsWith("software.amazon.awssdk.") diff --git a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java index 873e2cf877..305f8373b2 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-2.2/src/main/java/datadog/trace/instrumentation/aws/v2/AwsHttpClientInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.aws.v2; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope; import static net.bytebuddy.matcher.ElementMatchers.isMethod; @@ -25,6 +26,13 @@ import software.amazon.awssdk.core.internal.http.pipeline.stages.MakeAsyncHttpRe @AutoService(Instrumenter.class) public final class AwsHttpClientInstrumentation extends AbstractAwsClientInstrumentation { + @Override + public ElementMatcher classLoaderMatcher() { + // Optimization for expensive typeMatcher. + return hasClassesNamed( + "software.amazon.awssdk.core.internal.http.pipeline.stages.MakeHttpRequestStage"); + } + @Override public ElementMatcher typeMatcher() { return nameStartsWith("software.amazon.awssdk.") diff --git a/dd-java-agent/instrumentation/couchbase-2.6/src/main/java/datadog/trace/instrumentation/couchbase/client/CouchbaseNetworkInstrumentation.java b/dd-java-agent/instrumentation/couchbase-2.6/src/main/java/datadog/trace/instrumentation/couchbase/client/CouchbaseNetworkInstrumentation.java index 149325cf99..a6a87432cf 100644 --- a/dd-java-agent/instrumentation/couchbase-2.6/src/main/java/datadog/trace/instrumentation/couchbase/client/CouchbaseNetworkInstrumentation.java +++ b/dd-java-agent/instrumentation/couchbase-2.6/src/main/java/datadog/trace/instrumentation/couchbase/client/CouchbaseNetworkInstrumentation.java @@ -1,12 +1,11 @@ package datadog.trace.instrumentation.couchbase.client; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static java.util.Collections.singletonMap; 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.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; @@ -34,9 +33,7 @@ public class CouchbaseNetworkInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not( - classLoaderHasNoResources( - "com/couchbase/client/core/endpoint/AbstractGenericHandler.class")); + return hasClassesNamed("com.couchbase.client.core.endpoint.AbstractGenericHandler"); } @Override diff --git a/dd-java-agent/instrumentation/dropwizard/dropwizard-views/src/main/java/datadog/trace/instrumentation/dropwizard/view/DropwizardViewInstrumentation.java b/dd-java-agent/instrumentation/dropwizard/dropwizard-views/src/main/java/datadog/trace/instrumentation/dropwizard/view/DropwizardViewInstrumentation.java index d5622cbc49..7c4b757106 100644 --- a/dd-java-agent/instrumentation/dropwizard/dropwizard-views/src/main/java/datadog/trace/instrumentation/dropwizard/view/DropwizardViewInstrumentation.java +++ b/dd-java-agent/instrumentation/dropwizard/dropwizard-views/src/main/java/datadog/trace/instrumentation/dropwizard/view/DropwizardViewInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.dropwizard.view; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -9,7 +9,6 @@ import static java.util.Collections.singletonMap; 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.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -35,7 +34,7 @@ public final class DropwizardViewInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("io/dropwizard/views/ViewRenderer.class")); + return hasClassesNamed("io.dropwizard.views.ViewRenderer"); } @Override diff --git a/dd-java-agent/instrumentation/finatra-2.9/src/main/java/datadog/trace/instrumentation/finatra/FinatraInstrumentation.java b/dd-java-agent/instrumentation/finatra-2.9/src/main/java/datadog/trace/instrumentation/finatra/FinatraInstrumentation.java index 388ae75719..19167a6d25 100644 --- a/dd-java-agent/instrumentation/finatra-2.9/src/main/java/datadog/trace/instrumentation/finatra/FinatraInstrumentation.java +++ b/dd-java-agent/instrumentation/finatra-2.9/src/main/java/datadog/trace/instrumentation/finatra/FinatraInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.finatra; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -10,7 +10,6 @@ import static java.util.Collections.singletonMap; 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.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; @@ -53,7 +52,7 @@ public class FinatraInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("com/twitter/finatra/http/internal/routing/Route.class")); + return hasClassesNamed("com.twitter.finatra.http.internal.routing.Route"); } @Override diff --git a/dd-java-agent/instrumentation/hibernate/core-3.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_3/AbstractHibernateInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-3.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_3/AbstractHibernateInstrumentation.java index 4ddd2ea80e..6ed10c60e5 100644 --- a/dd-java-agent/instrumentation/hibernate/core-3.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_3/AbstractHibernateInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-3.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v3_3/AbstractHibernateInstrumentation.java @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.hibernate.core.v3_3; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; -import static net.bytebuddy.matcher.ElementMatchers.not; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import datadog.trace.agent.tooling.Instrumenter; import net.bytebuddy.matcher.ElementMatcher; @@ -17,7 +16,7 @@ public abstract class AbstractHibernateInstrumentation extends Instrumenter.Defa @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("org/hibernate/Session.class")); + return hasClassesNamed("org.hibernate.Session"); } @Override diff --git a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/AbstractHibernateInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/AbstractHibernateInstrumentation.java index 813287345a..ff16ec6d69 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/AbstractHibernateInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-4.0/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_0/AbstractHibernateInstrumentation.java @@ -1,7 +1,6 @@ package datadog.trace.instrumentation.hibernate.core.v4_0; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; -import static net.bytebuddy.matcher.ElementMatchers.not; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import datadog.trace.agent.tooling.Instrumenter; import net.bytebuddy.matcher.ElementMatcher; @@ -16,7 +15,7 @@ public abstract class AbstractHibernateInstrumentation extends Instrumenter.Defa @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("org/hibernate/Session.class")); + return hasClassesNamed("org.hibernate.Session"); } @Override diff --git a/dd-java-agent/instrumentation/hibernate/core-4.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_3/ProcedureCallInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-4.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_3/ProcedureCallInstrumentation.java index ccf95f19a0..ec325d7fba 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_3/ProcedureCallInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-4.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_3/ProcedureCallInstrumentation.java @@ -1,11 +1,10 @@ package datadog.trace.instrumentation.hibernate.core.v4_3; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; @@ -48,7 +47,7 @@ public class ProcedureCallInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("org/hibernate/Session.class")); + return hasClassesNamed("org.hibernate.Session"); } @Override diff --git a/dd-java-agent/instrumentation/hibernate/core-4.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_3/SessionInstrumentation.java b/dd-java-agent/instrumentation/hibernate/core-4.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_3/SessionInstrumentation.java index 830008f1f0..681e17f252 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_3/SessionInstrumentation.java +++ b/dd-java-agent/instrumentation/hibernate/core-4.3/src/main/java/datadog/trace/instrumentation/hibernate/core/v4_3/SessionInstrumentation.java @@ -1,11 +1,10 @@ package datadog.trace.instrumentation.hibernate.core.v4_3; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasInterface; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import com.google.auto.service.AutoService; @@ -55,7 +54,7 @@ public class SessionInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("org/hibernate/Session.class")); + return hasClassesNamed("org.hibernate.Session"); } @Override diff --git a/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixInstrumentation.java b/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixInstrumentation.java index 27cbb2b8f4..da870ccec4 100644 --- a/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixInstrumentation.java +++ b/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixInstrumentation.java @@ -1,10 +1,9 @@ package datadog.trace.instrumentation.hystrix; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static datadog.trace.instrumentation.hystrix.HystrixDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import com.google.auto.service.AutoService; @@ -32,7 +31,7 @@ public class HystrixInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("com/netflix/hystrix/HystrixCommand.class")); + return hasClassesNamed("com.netflix.hystrix.HystrixCommand"); } @Override diff --git a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/AkkaForkJoinTaskInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/AkkaForkJoinTaskInstrumentation.java index f17b2a4682..5e76144158 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/AkkaForkJoinTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/AkkaForkJoinTaskInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.java.concurrent; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isAbstract; @@ -41,6 +42,12 @@ public final class AkkaForkJoinTaskInstrumentation extends Instrumenter.Default super(AbstractExecutorInstrumentation.EXEC_NAME); } + @Override + public ElementMatcher classLoaderMatcher() { + // Optimization for expensive typeMatcher. + return hasClassesNamed(TASK_CLASS_NAME); + } + @Override public ElementMatcher typeMatcher() { return extendsClass(named(TASK_CLASS_NAME)); diff --git a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ScalaForkJoinTaskInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ScalaForkJoinTaskInstrumentation.java index 8a14235dcf..a50d32d41c 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ScalaForkJoinTaskInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ScalaForkJoinTaskInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.java.concurrent; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static net.bytebuddy.matcher.ElementMatchers.isAbstract; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -40,6 +41,12 @@ public final class ScalaForkJoinTaskInstrumentation extends Instrumenter.Default super(AbstractExecutorInstrumentation.EXEC_NAME); } + @Override + public ElementMatcher classLoaderMatcher() { + // Optimization for expensive typeMatcher. + return hasClassesNamed(TASK_CLASS_NAME); + } + @Override public ElementMatcher typeMatcher() { return extendsClass(named(TASK_CLASS_NAME)); diff --git a/dd-java-agent/instrumentation/jax-rs-annotations-1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-annotations-1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java index 5a2ed711d5..2f2228ed66 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations-1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-annotations-1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jaxrs1; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasSuperMethod; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; @@ -37,9 +37,9 @@ public final class JaxRsAnnotationsInstrumentation extends Instrumenter.Default // this is required to make sure instrumentation won't apply to jax-rs 2 @Override public ElementMatcher classLoaderMatcher() { - return classLoaderHasNoResources("javax/ws/rs/container/AsyncResponse.class") + return not(hasClassesNamed("javax.ws.rs.container.AsyncResponse")) // Optimization for expensive typeMatcher. - .and(not(classLoaderHasNoResources("javax/ws/rs/Path.class"))); + .and(hasClassesNamed("javax.ws.rs.Path")); } @Override diff --git a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/AbstractRequestContextInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/AbstractRequestContextInstrumentation.java index aff4eb518b..997ce7888c 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/AbstractRequestContextInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/AbstractRequestContextInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jaxrs2; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -9,7 +9,6 @@ import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.DEC import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; @@ -31,7 +30,7 @@ public abstract class AbstractRequestContextInstrumentation extends Instrumenter @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/ws/rs/container/ContainerRequestContext.class")); + return hasClassesNamed("javax.ws.rs.container.ContainerRequestContext"); } @Override diff --git a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/ContainerRequestFilterInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/ContainerRequestFilterInstrumentation.java index e1e715adad..a5bd8f5e36 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/ContainerRequestFilterInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/ContainerRequestFilterInstrumentation.java @@ -1,11 +1,10 @@ package datadog.trace.instrumentation.jaxrs2; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; @@ -33,7 +32,7 @@ public class ContainerRequestFilterInstrumentation extends Instrumenter.Default @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/ws/rs/container/ContainerRequestFilter.class")); + return hasClassesNamed("javax.ws.rs.container.ContainerRequestFilter"); } @Override diff --git a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java index c718379235..e282c139d8 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jaxrs2; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasSuperMethod; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; @@ -12,7 +12,6 @@ import static net.bytebuddy.matcher.ElementMatchers.declaresMethod; import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; @@ -44,7 +43,7 @@ public final class JaxRsAnnotationsInstrumentation extends Instrumenter.Default @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/ws/rs/Path.class")); + return hasClassesNamed("javax.ws.rs.Path"); } @Override diff --git a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAsyncResponseInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAsyncResponseInstrumentation.java index 60932cec8f..7328c808be 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAsyncResponseInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAsyncResponseInstrumentation.java @@ -1,11 +1,10 @@ package datadog.trace.instrumentation.jaxrs2; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.DECORATE; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -38,7 +37,7 @@ public final class JaxRsAsyncResponseInstrumentation extends Instrumenter.Defaul @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/ws/rs/container/AsyncResponse.class")); + return hasClassesNamed("javax.ws.rs.container.AsyncResponse"); } @Override diff --git a/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index 816cebce28..3a6aa5e29e 100644 --- a/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client-1.1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.jaxrs.v1; import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; @@ -11,7 +11,6 @@ import static datadog.trace.instrumentation.jaxrs.v1.InjectAdapter.SETTER; import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -39,7 +38,7 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("com/sun/jersey/api/client/ClientHandler.class")); + return hasClassesNamed("com.sun.jersey.api.client.ClientHandler"); } @Override diff --git a/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java index 91e8de24f5..d7b4e620a9 100644 --- a/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java @@ -1,11 +1,10 @@ package datadog.trace.instrumentation.jaxrs; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import com.google.auto.service.AutoService; @@ -28,7 +27,7 @@ public final class JaxRsClientInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/ws/rs/client/ClientBuilder.class")); + return hasClassesNamed("javax.ws.rs.client.ClientBuilder"); } @Override diff --git a/dd-java-agent/instrumentation/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java b/dd-java-agent/instrumentation/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java index 6a1f9ac348..e4d92ff680 100644 --- a/dd-java-agent/instrumentation/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java +++ b/dd-java-agent/instrumentation/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jedis; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static datadog.trace.instrumentation.jedis.JedisClientDecorator.DECORATE; @@ -34,9 +34,8 @@ public final class JedisInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { - return classLoaderHasNoResources("redis/clients/jedis/commands/ProtocolCommand.class") - // Optimization for expensive typeMatcher. - .and(not(classLoaderHasNoResources("redis/clients/jedis/Protocol.class"))); + // Avoid matching 3.x + return not(hasClassesNamed("redis.clients.jedis.commands.ProtocolCommand")); } @Override diff --git a/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/JettyHandlerInstrumentation.java b/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/JettyHandlerInstrumentation.java index 61a539eda4..b04880760a 100644 --- a/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/JettyHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/JettyHandlerInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jetty8; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; @@ -30,7 +30,7 @@ public final class JettyHandlerInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("org/eclipse/jetty/server/Handler.class")); + return hasClassesNamed("org.eclipse.jetty.server.Handler"); } @Override diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java index d267d94cbe..91898abfd1 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageConsumerInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jms; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -9,7 +9,6 @@ import static datadog.trace.instrumentation.jms.JMSDecorator.CONSUMER_DECORATE; import static datadog.trace.instrumentation.jms.MessageExtractAdapter.GETTER; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; @@ -38,7 +37,7 @@ public final class JMSMessageConsumerInstrumentation extends Instrumenter.Defaul @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/jms/MessageConsumer.class")); + return hasClassesNamed("javax.jms.MessageConsumer"); } @Override diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageListenerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageListenerInstrumentation.java index a64c7fb219..9ca14795c6 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageListenerInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jms; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -10,7 +10,6 @@ import static datadog.trace.instrumentation.jms.MessageExtractAdapter.GETTER; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -36,7 +35,7 @@ public final class JMSMessageListenerInstrumentation extends Instrumenter.Defaul @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/jms/MessageListener.class")); + return hasClassesNamed("javax.jms.MessageListener"); } @Override diff --git a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java index 3c5f60cef7..71843c64f1 100644 --- a/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/JMSMessageProducerInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jms; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; @@ -9,7 +9,6 @@ import static datadog.trace.instrumentation.jms.JMSDecorator.PRODUCER_DECORATE; import static datadog.trace.instrumentation.jms.MessageInjectAdapter.SETTER; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -38,7 +37,7 @@ public final class JMSMessageProducerInstrumentation extends Instrumenter.Defaul @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/jms/MessageProducer.class")); + return hasClassesNamed("javax.jms.MessageProducer"); } @Override diff --git a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java index cfe2643d61..51e949dbad 100644 --- a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java +++ b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jsp; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -8,7 +8,6 @@ import static datadog.trace.instrumentation.jsp.JSPDecorator.DECORATE; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -32,7 +31,7 @@ public final class JSPInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/servlet/jsp/HttpJspPage.class")); + return hasClassesNamed("javax.servlet.jsp.HttpJspPage"); } @Override diff --git a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/ChannelFutureListenerInstrumentation.java b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/ChannelFutureListenerInstrumentation.java index 2c1511b07a..77f94cd5b9 100644 --- a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/ChannelFutureListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/ChannelFutureListenerInstrumentation.java @@ -1,13 +1,12 @@ package datadog.trace.instrumentation.netty40; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -36,7 +35,7 @@ public class ChannelFutureListenerInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("io/netty/channel/ChannelFutureListener.class")); + return hasClassesNamed("io.netty.channel.ChannelFutureListener"); } @Override diff --git a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelPipelineInstrumentation.java b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelPipelineInstrumentation.java index 42c29eb673..45e8fa6df6 100644 --- a/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelPipelineInstrumentation.java +++ b/dd-java-agent/instrumentation/netty-4.0/src/main/java/datadog/trace/instrumentation/netty40/NettyChannelPipelineInstrumentation.java @@ -1,12 +1,11 @@ package datadog.trace.instrumentation.netty40; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope; 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.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -49,7 +48,7 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("io/netty/channel/ChannelPipeline.class")); + return hasClassesNamed("io.netty.channel.ChannelPipeline"); } @Override diff --git a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/ChannelFutureListenerInstrumentation.java b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/ChannelFutureListenerInstrumentation.java index 12d13127f2..577ddde9be 100644 --- a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/ChannelFutureListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/ChannelFutureListenerInstrumentation.java @@ -1,13 +1,12 @@ package datadog.trace.instrumentation.netty41; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -36,7 +35,7 @@ public class ChannelFutureListenerInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("io/netty/channel/ChannelFutureListener.class")); + return hasClassesNamed("io.netty.channel.ChannelFutureListener"); } @Override diff --git a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelPipelineInstrumentation.java b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelPipelineInstrumentation.java index b72bc739db..504c12c71d 100644 --- a/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelPipelineInstrumentation.java +++ b/dd-java-agent/instrumentation/netty-4.1/src/main/java/datadog/trace/instrumentation/netty41/NettyChannelPipelineInstrumentation.java @@ -1,12 +1,11 @@ package datadog.trace.instrumentation.netty41; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope; 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.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -49,7 +48,7 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("io/netty/channel/ChannelPipeline.class")); + return hasClassesNamed("io.netty.channel.ChannelPipeline"); } @Override diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayInstrumentation.java b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayInstrumentation.java index d7403a6731..76ebd56c56 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayInstrumentation.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play24/PlayInstrumentation.java @@ -1,10 +1,9 @@ package datadog.trace.instrumentation.play24; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -25,7 +24,7 @@ public final class PlayInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("play/api/mvc/Action.class")); + return hasClassesNamed("play.api.mvc.Action"); } @Override diff --git a/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayInstrumentation.java b/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayInstrumentation.java index 4096339492..443dd9a4b4 100644 --- a/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayInstrumentation.java +++ b/dd-java-agent/instrumentation/play-2.6/src/main/java/datadog/trace/instrumentation/play26/PlayInstrumentation.java @@ -1,10 +1,9 @@ package datadog.trace.instrumentation.play26; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -25,7 +24,7 @@ public final class PlayInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("play/api/mvc/Action.class")); + return hasClassesNamed("play.api.mvc.Action"); } @Override diff --git a/dd-java-agent/instrumentation/play-ws/src/main/java/datadog/trace/instrumentation/playws/BasePlayWSClientInstrumentation.java b/dd-java-agent/instrumentation/play-ws/src/main/java/datadog/trace/instrumentation/playws/BasePlayWSClientInstrumentation.java index 9695a3d92c..deb0dd614e 100644 --- a/dd-java-agent/instrumentation/play-ws/src/main/java/datadog/trace/instrumentation/playws/BasePlayWSClientInstrumentation.java +++ b/dd-java-agent/instrumentation/play-ws/src/main/java/datadog/trace/instrumentation/playws/BasePlayWSClientInstrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.playws; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; -import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasInterface; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; +import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; @@ -24,8 +24,7 @@ public abstract class BasePlayWSClientInstrumentation extends Instrumenter.Defau @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not( - classLoaderHasNoResources("play/shaded/ahc/org/asynchttpclient/AsyncHttpClient.class")); + return hasClassesNamed("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient"); } @Override @@ -34,7 +33,7 @@ public abstract class BasePlayWSClientInstrumentation extends Instrumenter.Defau // It also delegates to another AsyncHttpClient return nameStartsWith("play.") .and( - hasInterface(named("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient")) + implementsInterface(named("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient")) .and(not(named("play.api.libs.ws.ahc.cache.CachingAsyncHttpClient")))); } diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java index 57bc10111d..790c7b9f26 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.rabbitmq.amqp; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -57,7 +57,7 @@ public class RabbitChannelInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("com/rabbitmq/client/Channel.class")); + return hasClassesNamed("com.rabbitmq.client.Channel"); } @Override diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitCommandInstrumentation.java b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitCommandInstrumentation.java index c4473aba76..016c816a27 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitCommandInstrumentation.java +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/main/java/datadog/trace/instrumentation/rabbitmq/amqp/RabbitCommandInstrumentation.java @@ -1,13 +1,12 @@ package datadog.trace.instrumentation.rabbitmq.amqp; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static datadog.trace.instrumentation.rabbitmq.amqp.RabbitDecorator.DECORATE; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; import com.rabbitmq.client.Command; @@ -29,7 +28,7 @@ public class RabbitCommandInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("com/rabbitmq/client/Command.class")); + return hasClassesNamed("com.rabbitmq.client.Command"); } @Override diff --git a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/ContinuationInstrumentation.java b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/ContinuationInstrumentation.java index 12f254ba29..9f4c0ca173 100644 --- a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/ContinuationInstrumentation.java +++ b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/ContinuationInstrumentation.java @@ -1,12 +1,11 @@ package datadog.trace.instrumentation.ratpack; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -29,7 +28,7 @@ public final class ContinuationInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("ratpack/exec/internal/Continuation.class")); + return hasClassesNamed("ratpack.exec.internal.Continuation"); } @Override diff --git a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/ServerErrorHandlerInstrumentation.java b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/ServerErrorHandlerInstrumentation.java index f2af40ce52..b5364f3f1b 100644 --- a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/ServerErrorHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/ServerErrorHandlerInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.ratpack; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isAbstract; @@ -25,7 +25,7 @@ public class ServerErrorHandlerInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("ratpack/error/ServerErrorHandler.class")); + return hasClassesNamed("ratpack.error.ServerErrorHandler"); } @Override diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/src/main/java/datadog/trace/instrumentation/reactor/core/FluxAndMonoInstrumentation.java b/dd-java-agent/instrumentation/reactor-core-3.1/src/main/java/datadog/trace/instrumentation/reactor/core/FluxAndMonoInstrumentation.java index 8c56eace80..1b347d1286 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/src/main/java/datadog/trace/instrumentation/reactor/core/FluxAndMonoInstrumentation.java +++ b/dd-java-agent/instrumentation/reactor-core-3.1/src/main/java/datadog/trace/instrumentation/reactor/core/FluxAndMonoInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.reactor.core; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isAbstract; @@ -28,7 +28,7 @@ public final class FluxAndMonoInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("reactor/core/publisher/Mono.class")); + return hasClassesNamed("reactor.core.publisher.Mono"); } @Override diff --git a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Instrumentation.java b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Instrumentation.java index 5be074d987..05f314a190 100644 --- a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Instrumentation.java @@ -1,10 +1,11 @@ package datadog.trace.instrumentation.servlet2; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -24,8 +25,7 @@ public final class Servlet2Instrumentation extends Instrumenter.Default { // this is required to make sure servlet 2 instrumentation won't apply to servlet 3 @Override public ElementMatcher classLoaderMatcher() { - return classLoaderHasNoResources( - "javax/servlet/AsyncEvent.class", "javax/servlet/AsyncListener.class"); + return not(hasClassesNamed("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener")); } @Override diff --git a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/AsyncContextInstrumentation.java b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/AsyncContextInstrumentation.java index d387530435..eaa52cb39e 100644 --- a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/AsyncContextInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/AsyncContextInstrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.servlet3; import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate; import static datadog.trace.instrumentation.servlet3.HttpServletRequestInjectAdapter.SETTER; @@ -9,7 +9,6 @@ import static java.util.Collections.singletonMap; 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.not; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; @@ -34,7 +33,7 @@ public final class AsyncContextInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/servlet/AsyncContext.class")); + return hasClassesNamed("javax.servlet.AsyncContext"); } @Override diff --git a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Instrumentation.java b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Instrumentation.java index a7bb2ab63b..16b9b2753e 100644 --- a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Instrumentation.java @@ -1,11 +1,10 @@ package datadog.trace.instrumentation.servlet3; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -24,7 +23,7 @@ public final class Servlet3Instrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/servlet/http/HttpServlet.class")); + return hasClassesNamed("javax.servlet.http.HttpServlet"); } @Override diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java index 05f64d2851..dd326e670f 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/RequestDispatcherInstrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.servlet.dispatcher; import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -12,7 +12,6 @@ import static datadog.trace.instrumentation.servlet.dispatcher.RequestDispatcher import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -38,7 +37,7 @@ public final class RequestDispatcherInstrumentation extends Instrumenter.Default @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/servlet/RequestDispatcher.class")); + return hasClassesNamed("javax.servlet.RequestDispatcher"); } @Override diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/ServletContextInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/ServletContextInstrumentation.java index 972915ca4f..7161874778 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/ServletContextInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/dispatcher/ServletContextInstrumentation.java @@ -1,11 +1,10 @@ package datadog.trace.instrumentation.servlet.dispatcher; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -28,7 +27,7 @@ public final class ServletContextInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/servlet/ServletContext.class")); + return hasClassesNamed("javax.servlet.ServletContext"); } @Override diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java index fef044ca99..c16941d1c8 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/filter/FilterInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.servlet.filter; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -9,7 +9,6 @@ import static datadog.trace.instrumentation.servlet.filter.FilterDecorator.DECOR import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -38,8 +37,8 @@ public final class FilterInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - // return not(classLoaderHasNoResources("javax/servlet/Filter.class")); // Not available in 2.2 - return not(classLoaderHasNoResources("javax/servlet/http/HttpServlet.class")); + // return hasClassesNamed("javax.servlet.Filter"); // Not available in 2.2 + return hasClassesNamed("javax.servlet.http.HttpServlet"); } @Override diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java index 1ee59fee8e..63d1690883 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.servlet.http; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -11,7 +11,6 @@ import static net.bytebuddy.matcher.ElementMatchers.isProtected; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -40,7 +39,7 @@ public final class HttpServletInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/servlet/http/HttpServlet.class")); + return hasClassesNamed("javax.servlet.http.HttpServlet"); } @Override diff --git a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletResponseInstrumentation.java b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletResponseInstrumentation.java index d4e9f203cb..cec5bec9fa 100644 --- a/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletResponseInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/src/main/java/datadog/trace/instrumentation/servlet/http/HttpServletResponseInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.servlet.http; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -10,7 +10,6 @@ import static datadog.trace.instrumentation.servlet.ServletRequestSetter.SETTER; import static datadog.trace.instrumentation.servlet.http.HttpServletResponseDecorator.DECORATE; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; @@ -35,7 +34,7 @@ public final class HttpServletResponseInstrumentation extends Instrumenter.Defau @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("javax/servlet/http/HttpServletResponse.class")); + return hasClassesNamed("javax.servlet.http.HttpServletResponse"); } @Override diff --git a/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/client/DefaultWebClientInstrumentation.java b/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/client/DefaultWebClientInstrumentation.java index d9ddce6cc1..59aada4a39 100644 --- a/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/client/DefaultWebClientInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/client/DefaultWebClientInstrumentation.java @@ -1,12 +1,11 @@ package datadog.trace.instrumentation.springwebflux.client; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; 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.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import com.google.auto.service.AutoService; @@ -26,9 +25,7 @@ public class DefaultWebClientInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not( - classLoaderHasNoResources( - "org/springframework/web/reactive/function/client/ExchangeFunction.class")); + return hasClassesNamed("org.springframework.web.reactive.function.client.ExchangeFunction"); } @Override diff --git a/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterInstrumentation.java b/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterInstrumentation.java index dc297dd96c..553809a045 100644 --- a/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/server/HandlerAdapterInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.springwebflux.server; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isAbstract; @@ -20,6 +21,12 @@ import net.bytebuddy.matcher.ElementMatcher; @AutoService(Instrumenter.class) public final class HandlerAdapterInstrumentation extends AbstractWebfluxInstrumentation { + @Override + public ElementMatcher classLoaderMatcher() { + // Optimization for expensive typeMatcher. + return hasClassesNamed("org.springframework.web.reactive.HandlerAdapter"); + } + @Override public ElementMatcher typeMatcher() { return not(isAbstract()) diff --git a/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouterFunctionInstrumentation.java b/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouterFunctionInstrumentation.java index c6a6bf6443..0efd1363d9 100644 --- a/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouterFunctionInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webflux-5/src/main/java/datadog/trace/instrumentation/springwebflux/server/RouterFunctionInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.springwebflux.server; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.isAbstract; @@ -24,6 +25,12 @@ public final class RouterFunctionInstrumentation extends AbstractWebfluxInstrume super("spring-webflux-functional"); } + @Override + public ElementMatcher classLoaderMatcher() { + // Optimization for expensive typeMatcher. + return hasClassesNamed("org.springframework.web.reactive.function.server.ServerRequest"); + } + @Override public ElementMatcher typeMatcher() { return not(isAbstract()) diff --git a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java index eaa525ebc7..6d48c06f31 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HandlerAdapterInstrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.springweb; import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan; @@ -12,7 +12,6 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; @@ -37,7 +36,7 @@ public final class HandlerAdapterInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("org/springframework/web/servlet/HandlerAdapter.class")); + return hasClassesNamed("org.springframework.web.servlet.HandlerAdapter"); } @Override diff --git a/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAnnotationsInstrumentation.java index 9fa6ad989c..d766d9f8fa 100644 --- a/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAnnotationsInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.trace_annotation; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType; import static datadog.trace.instrumentation.trace_annotation.TraceConfigInstrumentation.PACKAGE_CLASS_NAME_REGEX; import static net.bytebuddy.matcher.ElementMatchers.declaresMethod; @@ -77,6 +78,16 @@ public final class TraceAnnotationsInstrumentation extends Instrumenter.Default this.methodTraceMatcher = methodTraceMatcher; } + @Override + public ElementMatcher classLoaderMatcher() { + // Optimization for expensive typeMatcher. + ElementMatcher.Junction matcher = hasClassesNamed(Trace.class.getName()); + for (final String name : additionalTraceAnnotations) { + matcher = matcher.or(hasClassesNamed(name)); + } + return matcher; + } + @Override public ElementMatcher typeMatcher() { return safeHasSuperType(declaresMethod(isAnnotatedWith(methodTraceMatcher))); diff --git a/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceConfigInstrumentation.java b/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceConfigInstrumentation.java index e9217453da..cd8faadb7f 100644 --- a/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceConfigInstrumentation.java +++ b/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceConfigInstrumentation.java @@ -1,5 +1,6 @@ package datadog.trace.instrumentation.trace_annotation; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -8,6 +9,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.Config; +import datadog.trace.api.Trace; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -115,7 +117,7 @@ public class TraceConfigInstrumentation implements Instrumenter { /** No-arg constructor only used by muzzle and tests. */ public TracerClassInstrumentation() { - this("noop", Collections.singleton("noop")); + this(Trace.class.getName(), Collections.singleton("noop")); } public TracerClassInstrumentation(final String className, final Set methodNames) { @@ -124,6 +126,12 @@ public class TraceConfigInstrumentation implements Instrumenter { this.methodNames = methodNames; } + @Override + public ElementMatcher classLoaderMatcher() { + // Optimization for expensive typeMatcher. + return hasClassesNamed(className); + } + @Override public ElementMatcher typeMatcher() { return safeHasSuperType(named(className)); diff --git a/dd-java-agent/instrumentation/trace-annotation/trace-annotation.gradle b/dd-java-agent/instrumentation/trace-annotation/trace-annotation.gradle index da1c3d20e0..b1d8af0bce 100644 --- a/dd-java-agent/instrumentation/trace-annotation/trace-annotation.gradle +++ b/dd-java-agent/instrumentation/trace-annotation/trace-annotation.gradle @@ -1,3 +1,12 @@ +muzzle { + pass { + group = "com.datadoghq" + module = "dd-trace-api" + versions = "[0.31.0,]" + assertInverse = true + } +} + apply from: "${rootDir}/gradle/java.gradle" dependencies { diff --git a/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java b/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java index cbb1c74fe8..2e82731ed2 100644 --- a/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java +++ b/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.twilio; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -38,7 +38,7 @@ public class TwilioAsyncInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("com/twilio/Twilio.class")); + return hasClassesNamed("com.twilio.Twilio"); } /** Match any child class of the base Twilio service classes. */ diff --git a/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioSyncInstrumentation.java b/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioSyncInstrumentation.java index 12af606ec2..4c8522b2d5 100644 --- a/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioSyncInstrumentation.java +++ b/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioSyncInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.twilio; -import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources; +import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed; import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan; import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan; @@ -34,7 +34,7 @@ public class TwilioSyncInstrumentation extends Instrumenter.Default { @Override public ElementMatcher classLoaderMatcher() { // Optimization for expensive typeMatcher. - return not(classLoaderHasNoResources("com/twilio/Twilio.class")); + return hasClassesNamed("com.twilio.Twilio"); } /** Match any child class of the base Twilio service classes. */