diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ByteBuddyElementMatchers.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ByteBuddyElementMatchers.java new file mode 100644 index 0000000000..c934ee1e64 --- /dev/null +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ByteBuddyElementMatchers.java @@ -0,0 +1,132 @@ +package datadog.trace.agent.tooling; + +import static net.bytebuddy.matcher.ElementMatchers.erasure; + +import java.util.HashSet; +import java.util.Set; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.build.HashCodeAndEqualsPlugin; +import net.bytebuddy.description.type.TypeDefinition; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.description.type.TypeList; +import net.bytebuddy.matcher.ElementMatcher; +import net.bytebuddy.matcher.ElementMatchers; + +/** + * This class provides some custom ByteBuddy element matchers to use when applying instrumentation + */ +@Slf4j +public class ByteBuddyElementMatchers { + + /** + * Matches any type description that declares a super type that matches the provided matcher. + * Exceptions during matching process are logged and ignored. + * + * @param matcher The type to be checked for being a super type of the matched type. + * @param The type of the matched object. + * @return A matcher that matches any type description that declares a super type that matches the + * provided matcher. + * @see ElementMatchers#hasSuperType(net.bytebuddy.matcher.ElementMatcher) + */ + public static ElementMatcher.Junction safeHasSuperType( + final ElementMatcher matcher) { + return safeHasGenericSuperType(erasure(matcher)); + } + + /** + * Matches any type description that declares a super type that matches the provided matcher. + * Exceptions during matching process are logged and ignored. + * + * @param matcher The type to be checked for being a super type of the matched type. + * @param The type of the matched object. + * @return A matcher that matches any type description that declares a super type that matches the + * provided matcher. + * @see ElementMatchers#hasGenericSuperType(net.bytebuddy.matcher.ElementMatcher) + */ + public static ElementMatcher.Junction safeHasGenericSuperType( + final ElementMatcher matcher) { + return new SafeHasSuperTypeMatcher<>(matcher); + } + + /** + * An element matcher that matches a super type. Exceptions during matching process are logged and + * ignored. + * + * @param The type of the matched entity. + * @see net.bytebuddy.matcher.HasSuperTypeMatcher + */ + @HashCodeAndEqualsPlugin.Enhance + public static class SafeHasSuperTypeMatcher + extends ElementMatcher.Junction.AbstractBase { + + /** The matcher to apply to any super type of the matched type. */ + private final ElementMatcher matcher; + + /** + * Creates a new matcher for a super type. + * + * @param matcher The matcher to apply to any super type of the matched type. + */ + public SafeHasSuperTypeMatcher(final ElementMatcher matcher) { + this.matcher = matcher; + } + + @Override + public boolean matches(final T target) { + final Set checkedInterfaces = new HashSet<>(); + // We do not use foreach loop and iterator interface here because we need to catch exceptions + // in {@code getSuperClass} calls + TypeDefinition typeDefinition = target; + while (typeDefinition != null) { + if (matcher.matches(typeDefinition.asGenericType()) + || hasInterface(typeDefinition, checkedInterfaces)) { + return true; + } + typeDefinition = safeGetSuperClass(typeDefinition); + } + return false; + } + + private TypeDefinition safeGetSuperClass(final TypeDefinition typeDefinition) { + try { + return typeDefinition.getSuperClass(); + } catch (final Exception e) { + log.info("Exception trying to get next type definition:", e); + return null; + } + } + + /** + * Matches a type's interfaces against the provided matcher. + * + * @param typeDefinition The type for which to check all implemented interfaces. + * @param checkedInterfaces The interfaces that have already been checked. + * @return {@code true} if any interface matches the supplied matcher. + */ + private boolean hasInterface( + final TypeDefinition typeDefinition, final Set checkedInterfaces) { + for (final TypeDefinition interfaceType : safeGetInterfaces(typeDefinition)) { + if (checkedInterfaces.add(interfaceType.asErasure()) + && (matcher.matches(interfaceType.asGenericType()) + || hasInterface(interfaceType, checkedInterfaces))) { + return true; + } + } + return false; + } + + private TypeList.Generic safeGetInterfaces(final TypeDefinition typeDefinition) { + try { + return typeDefinition.getInterfaces(); + } catch (final Exception e) { + log.info("Exception trying to get interfaces:", e); + return new TypeList.Generic.Empty(); + } + } + + @Override + public String toString() { + return "safeHasSuperType(" + matcher + ")"; + } + } +} diff --git a/dd-java-agent/instrumentation/apache-httpclient-4.3/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java b/dd-java-agent/instrumentation/apache-httpclient-4.3/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java index f3e05c6ed7..23d71954b6 100644 --- a/dd-java-agent/instrumentation/apache-httpclient-4.3/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/apache-httpclient-4.3/src/main/java/datadog/trace/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.apachehttpclient; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isAbstract; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -32,7 +32,7 @@ public class ApacheHttpClientInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { return named("org.apache.http.impl.client.HttpClientBuilder") - .or(hasSuperType(named("org.apache.http.impl.client.CloseableHttpClient"))); + .or(safeHasSuperType(named("org.apache.http.impl.client.CloseableHttpClient"))); } @Override diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-2/src/main/java/datadog/trace/instrumentation/elasticsearch2/Elasticsearch2TransportClientInstrumentation.java b/dd-java-agent/instrumentation/elasticsearch-transport-2/src/main/java/datadog/trace/instrumentation/elasticsearch2/Elasticsearch2TransportClientInstrumentation.java index 7ae20d78b7..b607f603bd 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-2/src/main/java/datadog/trace/instrumentation/elasticsearch2/Elasticsearch2TransportClientInstrumentation.java +++ b/dd-java-agent/instrumentation/elasticsearch-transport-2/src/main/java/datadog/trace/instrumentation/elasticsearch2/Elasticsearch2TransportClientInstrumentation.java @@ -41,7 +41,7 @@ public class Elasticsearch2TransportClientInstrumentation extends Instrumenter.D @Override public ElementMatcher typeMatcher() { // If we want to be more generic, we could instrument the interface instead: - // .and(hasSuperType(named("org.elasticsearch.client.ElasticsearchClient")))) + // .and(safeHasSuperType(named("org.elasticsearch.client.ElasticsearchClient")))) return not(isInterface()).and(named("org.elasticsearch.client.support.AbstractClient")); } diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5TransportClientInstrumentation.java b/dd-java-agent/instrumentation/elasticsearch-transport-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5TransportClientInstrumentation.java index 22401d276a..f138adfaa2 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5TransportClientInstrumentation.java +++ b/dd-java-agent/instrumentation/elasticsearch-transport-5/src/main/java/datadog/trace/instrumentation/elasticsearch5/Elasticsearch5TransportClientInstrumentation.java @@ -41,7 +41,7 @@ public class Elasticsearch5TransportClientInstrumentation extends Instrumenter.D @Override public ElementMatcher typeMatcher() { // If we want to be more generic, we could instrument the interface instead: - // .and(hasSuperType(named("org.elasticsearch.client.ElasticsearchClient")))) + // .and(safeHasSuperType(named("org.elasticsearch.client.ElasticsearchClient")))) return not(isInterface()).and(named("org.elasticsearch.client.support.AbstractClient")); } diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-6/src/main/java/datadog/trace/instrumentation/elasticsearch6/Elasticsearch6TransportClientInstrumentation.java b/dd-java-agent/instrumentation/elasticsearch-transport-6/src/main/java/datadog/trace/instrumentation/elasticsearch6/Elasticsearch6TransportClientInstrumentation.java index 27bf0c158f..6f9b925941 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-6/src/main/java/datadog/trace/instrumentation/elasticsearch6/Elasticsearch6TransportClientInstrumentation.java +++ b/dd-java-agent/instrumentation/elasticsearch-transport-6/src/main/java/datadog/trace/instrumentation/elasticsearch6/Elasticsearch6TransportClientInstrumentation.java @@ -45,7 +45,7 @@ public class Elasticsearch6TransportClientInstrumentation extends Instrumenter.D @Override public ElementMatcher typeMatcher() { // If we want to be more generic, we could instrument the interface instead: - // .and(hasSuperType(named("org.elasticsearch.client.ElasticsearchClient")))) + // .and(safeHasSuperType(named("org.elasticsearch.client.ElasticsearchClient")))) return not(isInterface()).and(named("org.elasticsearch.client.support.AbstractClient")); } diff --git a/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixCommandInstrumentation.java b/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixCommandInstrumentation.java index bb723c565b..0514e4c951 100644 --- a/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixCommandInstrumentation.java +++ b/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixCommandInstrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.hystrix; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -31,7 +31,7 @@ public class HystrixCommandInstrumentation extends Instrumenter.Default { public ElementMatcher typeMatcher() { // Not adding a version restriction because this should work with any version and add some // benefit. - return not(isInterface()).and(hasSuperType(named("com.netflix.hystrix.HystrixCommand"))); + return not(isInterface()).and(safeHasSuperType(named("com.netflix.hystrix.HystrixCommand"))); } @Override diff --git a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java index 4bc99e0463..c7e6fff610 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.java.concurrent; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.nameMatches; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -95,7 +95,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { return not(isInterface()) - .and(hasSuperType(named(Executor.class.getName()))) + .and(safeHasSuperType(named(Executor.class.getName()))) .and( new ElementMatcher() { @Override diff --git a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java index 3f6a4a0504..4c56a7e6cf 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.java.concurrent; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; @@ -70,7 +70,7 @@ public final class FutureInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { return not(isInterface()) - .and(hasSuperType(named(Future.class.getName()))) + .and(safeHasSuperType(named(Future.class.getName()))) .and( new ElementMatcher() { @Override diff --git a/dd-java-agent/instrumentation/jax-rs-annotations/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-annotations/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsAnnotationsInstrumentation.java index 8ae0bd7de8..ee4755ece1 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-annotations/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsAnnotationsInstrumentation.java @@ -1,8 +1,7 @@ package datadog.trace.instrumentation.jaxrs; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static net.bytebuddy.matcher.ElementMatchers.declaresMethod; -import static net.bytebuddy.matcher.ElementMatchers.failSafe; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -31,16 +30,14 @@ public final class JaxRsAnnotationsInstrumentation extends Instrumenter.Default @Override public ElementMatcher typeMatcher() { - return hasSuperType( + return safeHasSuperType( isAnnotatedWith(named("javax.ws.rs.Path")) - .or( - failSafe( - hasSuperType(declaresMethod(isAnnotatedWith(named("javax.ws.rs.Path"))))))); + .or(safeHasSuperType(declaresMethod(isAnnotatedWith(named("javax.ws.rs.Path")))))); } @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( isAnnotatedWith( named("javax.ws.rs.Path") diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java index c896aa1c64..e0025d06df 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.jaxrs; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; @@ -21,7 +21,7 @@ public final class JaxRsClientInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { - return hasSuperType(named("javax.ws.rs.client.ClientBuilder")); + return safeHasSuperType(named("javax.ws.rs.client.ClientBuilder")); } @Override @@ -37,7 +37,7 @@ public final class JaxRsClientInstrumentation extends Instrumenter.Default { public Map transformers() { final Map transformers = new HashMap<>(); transformers.put( - named("build").and(returns(hasSuperType(named("javax.ws.rs.client.Client")))), + named("build").and(returns(safeHasSuperType(named("javax.ws.rs.client.Client")))), ClientBuilderAdvice.class.getName()); return transformers; } diff --git a/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/HandlerInstrumentation.java b/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/HandlerInstrumentation.java index f1cd07214c..f829f23400 100644 --- a/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/HandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/HandlerInstrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.jetty8; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -30,7 +30,7 @@ public final class HandlerInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { return not(isInterface()) - .and(hasSuperType(named("org.eclipse.jetty.server.Handler"))) + .and(safeHasSuperType(named("org.eclipse.jetty.server.Handler"))) .and(not(named("org.eclipse.jetty.server.handler.HandlerWrapper"))); } diff --git a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageConsumerInstrumentation.java index c9bc5896ac..41339cc8f5 100644 --- a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageConsumerInstrumentation.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.jms1; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.instrumentation.jms.util.JmsUtil.toResourceName; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -47,7 +47,7 @@ public final class JMS1MessageConsumerInstrumentation extends Instrumenter.Defau @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.jms.MessageConsumer"))); + return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageConsumer"))); } @Override @@ -62,7 +62,7 @@ public final class JMS1MessageConsumerInstrumentation extends Instrumenter.Defau @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( named("receive").and(takesArguments(0).or(takesArguments(1))).and(isPublic()), ConsumerAdvice.class.getName()); diff --git a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageListenerInstrumentation.java b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageListenerInstrumentation.java index 21f84f6b6b..2ff94ef531 100644 --- a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageListenerInstrumentation.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.jms1; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.instrumentation.jms.util.JmsUtil.toResourceName; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -39,7 +39,7 @@ public final class JMS1MessageListenerInstrumentation extends Instrumenter.Defau @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.jms.MessageListener"))); + return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageListener"))); } @Override diff --git a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageProducerInstrumentation.java b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageProducerInstrumentation.java index 97efb4d3f2..c4f54b22e8 100644 --- a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageProducerInstrumentation.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.jms1; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.instrumentation.jms.util.JmsUtil.toResourceName; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -39,7 +39,7 @@ public final class JMS1MessageProducerInstrumentation extends Instrumenter.Defau @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.jms.MessageProducer"))); + return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageProducer"))); } @Override diff --git a/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageConsumerInstrumentation.java index e0dca6ef9d..d48b050397 100644 --- a/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageConsumerInstrumentation.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.jms2; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.instrumentation.jms.util.JmsUtil.toResourceName; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -46,7 +46,7 @@ public final class JMS2MessageConsumerInstrumentation extends Instrumenter.Defau @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.jms.MessageConsumer"))); + return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageConsumer"))); } @Override diff --git a/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageListenerInstrumentation.java b/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageListenerInstrumentation.java index 2ccfe83f47..ceae43d9d3 100644 --- a/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageListenerInstrumentation.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.jms2; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.instrumentation.jms.util.JmsUtil.toResourceName; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -39,7 +39,7 @@ public final class JMS2MessageListenerInstrumentation extends Instrumenter.Defau @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.jms.MessageListener"))); + return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageListener"))); } @Override diff --git a/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageProducerInstrumentation.java b/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageProducerInstrumentation.java index 01546ab226..6a8f12e0a0 100644 --- a/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageProducerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageProducerInstrumentation.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.jms2; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.instrumentation.jms.util.JmsUtil.toResourceName; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -39,7 +39,7 @@ public final class JMS2MessageProducerInstrumentation extends Instrumenter.Defau @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.jms.MessageProducer"))); + return not(isInterface()).and(safeHasSuperType(named("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 ed11deeb25..41daeedabd 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,7 +1,7 @@ package datadog.trace.instrumentation.jsp; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -39,12 +39,12 @@ public final class JSPInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.servlet.jsp.HttpJspPage"))); + return not(isInterface()).and(safeHasSuperType(named("javax.servlet.jsp.HttpJspPage"))); } @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( named("_jspService") .and(takesArgument(0, named("javax.servlet.http.HttpServletRequest"))) @@ -68,14 +68,14 @@ public final class JSPInstrumentation extends Instrumenter.Default { final Span span = scope.span(); // get the JSP file name being rendered in an include action - Object includeServletPath = req.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH); + final Object includeServletPath = req.getAttribute(RequestDispatcher.INCLUDE_SERVLET_PATH); String resourceName = req.getServletPath(); if (includeServletPath != null && includeServletPath instanceof String) { resourceName = includeServletPath.toString(); } span.setTag(DDTags.RESOURCE_NAME, resourceName); - Object forwardOrigin = req.getAttribute(RequestDispatcher.FORWARD_SERVLET_PATH); + final Object forwardOrigin = req.getAttribute(RequestDispatcher.FORWARD_SERVLET_PATH); if (forwardOrigin != null && forwardOrigin instanceof String) { span.setTag("jsp.forwardOrigin", forwardOrigin.toString()); } 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 c64986f48b..5cb8977ef3 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,7 +1,7 @@ package datadog.trace.instrumentation.netty40; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; @@ -48,7 +48,7 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("io.netty.channel.ChannelPipeline"))); + return not(isInterface()).and(safeHasSuperType(named("io.netty.channel.ChannelPipeline"))); } @Override @@ -99,7 +99,9 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default { @Advice.Enter final int depth, @Advice.This final ChannelPipeline pipeline, @Advice.Argument(2) final ChannelHandler handler) { - if (depth > 0) return; + if (depth > 0) { + return; + } try { // Server pipeline handlers 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 7677f2addb..3ae8fd5024 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,7 +1,7 @@ package datadog.trace.instrumentation.netty41; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; @@ -48,7 +48,7 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("io.netty.channel.ChannelPipeline"))); + return not(isInterface()).and(safeHasSuperType(named("io.netty.channel.ChannelPipeline"))); } @Override @@ -99,7 +99,9 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default { @Advice.Enter final int depth, @Advice.This final ChannelPipeline pipeline, @Advice.Argument(2) final ChannelHandler handler) { - if (depth > 0) return; + if (depth > 0) { + return; + } try { // Server pipeline handlers diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play/PlayInstrumentation.java b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play/PlayInstrumentation.java index 801fa19940..7f72c276e1 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play/PlayInstrumentation.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play/PlayInstrumentation.java @@ -1,9 +1,9 @@ package datadog.trace.instrumentation.play; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithMethod; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -46,7 +46,7 @@ public final class PlayInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { - return hasSuperType(named("play.api.mvc.Action")); + return safeHasSuperType(named("play.api.mvc.Action")); } @Override diff --git a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackHttpClientInstrumentation.java b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackHttpClientInstrumentation.java index b62f4ca880..5ac3701acc 100644 --- a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackHttpClientInstrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.ratpack; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.instrumentation.ratpack.RatpackInstrumentation.CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; @@ -35,7 +35,7 @@ public final class RatpackHttpClientInstrumentation extends Instrumenter.Default @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("ratpack.http.client.HttpClient"))); + return not(isInterface()).and(safeHasSuperType(named("ratpack.http.client.HttpClient"))); } @Override @@ -63,7 +63,7 @@ public final class RatpackHttpClientInstrumentation extends Instrumenter.Default @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( named("request") .and( diff --git a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackInstrumentation.java b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackInstrumentation.java index da4c15bc74..466ba6b732 100644 --- a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackInstrumentation.java +++ b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackInstrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.ratpack; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithMethod; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isStatic; @@ -91,7 +91,7 @@ public final class RatpackInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("ratpack.exec.ExecStarter"))); + return not(isInterface()).and(safeHasSuperType(named("ratpack.exec.ExecStarter"))); } @Override @@ -136,7 +136,7 @@ public final class RatpackInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { return named("ratpack.exec.Execution") - .or(not(isInterface()).and(hasSuperType(named("ratpack.exec.Execution")))); + .or(not(isInterface()).and(safeHasSuperType(named("ratpack.exec.Execution")))); } @Override diff --git a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/FilterChain2Instrumentation.java b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/FilterChain2Instrumentation.java index 64f8103a64..37e5b47728 100644 --- a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/FilterChain2Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/FilterChain2Instrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.servlet2; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -23,7 +23,7 @@ public final class FilterChain2Instrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.servlet.FilterChain"))); + return not(isInterface()).and(safeHasSuperType(named("javax.servlet.FilterChain"))); } @Override diff --git a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/HttpServlet2Instrumentation.java b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/HttpServlet2Instrumentation.java index f58c348ce4..b294e5ffd1 100644 --- a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/HttpServlet2Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/HttpServlet2Instrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.servlet2; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isProtected; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -28,7 +28,7 @@ public final class HttpServlet2Instrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.servlet.http.HttpServlet"))); + return not(isInterface()).and(safeHasSuperType(named("javax.servlet.http.HttpServlet"))); } @Override diff --git a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/AbstractServlet3Instrumentation.java b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/AbstractServlet3Instrumentation.java index e7c6bc0198..8f3de24845 100644 --- a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/AbstractServlet3Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/AbstractServlet3Instrumentation.java @@ -1,7 +1,7 @@ package datadog.trace.instrumentation.servlet3; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -21,7 +21,7 @@ public class AbstractServlet3Instrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.servlet.FilterChain"))); + return not(isInterface()).and(safeHasSuperType(named("javax.servlet.FilterChain"))); } @Override diff --git a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/FilterChain3Instrumentation.java b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/FilterChain3Instrumentation.java index 15e6c236f1..41b6e537c9 100644 --- a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/FilterChain3Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/FilterChain3Instrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.servlet3; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isPublic; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -18,7 +18,7 @@ public final class FilterChain3Instrumentation extends AbstractServlet3Instrumen @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.servlet.FilterChain"))); + return not(isInterface()).and(safeHasSuperType(named("javax.servlet.FilterChain"))); } @Override diff --git a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/HttpServlet3Instrumentation.java b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/HttpServlet3Instrumentation.java index 61f2b1288e..b6d72be6c4 100644 --- a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/HttpServlet3Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/HttpServlet3Instrumentation.java @@ -1,6 +1,6 @@ package datadog.trace.instrumentation.servlet3; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isProtected; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -18,7 +18,7 @@ public final class HttpServlet3Instrumentation extends AbstractServlet3Instrumen @Override public ElementMatcher typeMatcher() { - return not(isInterface()).and(hasSuperType(named("javax.servlet.http.HttpServlet"))); + return not(isInterface()).and(safeHasSuperType(named("javax.servlet.http.HttpServlet"))); } @Override diff --git a/dd-java-agent/instrumentation/spring-web/src/main/java/datadog/trace/instrumentation/springweb/SpringWebInstrumentation.java b/dd-java-agent/instrumentation/spring-web/src/main/java/datadog/trace/instrumentation/springweb/SpringWebInstrumentation.java index 632a6e3742..d0ad15571f 100644 --- a/dd-java-agent/instrumentation/spring-web/src/main/java/datadog/trace/instrumentation/springweb/SpringWebInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-web/src/main/java/datadog/trace/instrumentation/springweb/SpringWebInstrumentation.java @@ -1,8 +1,8 @@ package datadog.trace.instrumentation.springweb; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithField; import static io.opentracing.log.Fields.ERROR_OBJECT; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isProtected; @@ -38,7 +38,7 @@ public final class SpringWebInstrumentation extends Instrumenter.Default { @Override public ElementMatcher typeMatcher() { return not(isInterface()) - .and(hasSuperType(named("org.springframework.web.servlet.HandlerAdapter"))); + .and(safeHasSuperType(named("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 3d77dfe3c4..965e05f520 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,8 +1,8 @@ package datadog.trace.instrumentation.trace_annotation; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.instrumentation.trace_annotation.TraceConfigInstrumentation.PACKAGE_CLASS_NAME_REGEX; import static net.bytebuddy.matcher.ElementMatchers.declaresMethod; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.is; import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -79,12 +79,12 @@ public final class TraceAnnotationsInstrumentation extends Instrumenter.Default @Override public ElementMatcher typeMatcher() { - return hasSuperType(declaresMethod(isAnnotatedWith(methodTraceMatcher))); + return safeHasSuperType(declaresMethod(isAnnotatedWith(methodTraceMatcher))); } @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put(isAnnotatedWith(methodTraceMatcher), TraceAdvice.class.getName()); return transformers; } 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 79744ec1c4..02e71c8171 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,6 +1,6 @@ package datadog.trace.instrumentation.trace_annotation; -import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static net.bytebuddy.matcher.ElementMatchers.named; import com.google.auto.service.AutoService; @@ -92,7 +92,7 @@ public class TraceConfigInstrumentation implements Instrumenter { } for (final Map.Entry> entry : classMethodsToTrace.entrySet()) { - TracerClassInstrumentation tracerConfigClass = + final TracerClassInstrumentation tracerConfigClass = new TracerClassInstrumentation(entry.getKey(), entry.getValue()); agentBuilder = tracerConfigClass.instrument(agentBuilder); } @@ -109,7 +109,7 @@ public class TraceConfigInstrumentation implements Instrumenter { this("noop", Collections.singleton("noop")); } - public TracerClassInstrumentation(String className, Set methodNames) { + public TracerClassInstrumentation(final String className, final Set methodNames) { super("trace", "trace-config"); this.className = className; this.methodNames = methodNames; @@ -117,7 +117,7 @@ public class TraceConfigInstrumentation implements Instrumenter { @Override public ElementMatcher typeMatcher() { - return hasSuperType(named(className)); + return safeHasSuperType(named(className)); } @Override @@ -131,7 +131,7 @@ public class TraceConfigInstrumentation implements Instrumenter { } } - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put(methodMatchers, TraceAdvice.class.getName()); return transformers; }