Add special handling for ignoring `javax.decorator.Decorator` annotated classes.

This commit is contained in:
Tyler Benson 2020-02-19 16:21:41 -08:00
parent 88aa31b63e
commit 6e4b55304e
5 changed files with 11 additions and 6 deletions

View File

@ -2,7 +2,6 @@ package datadog.trace.agent.tooling;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.skipClassLoader; import static datadog.trace.agent.tooling.ClassLoaderMatcher.skipClassLoader;
import static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.any;
import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith;
import static net.bytebuddy.matcher.ElementMatchers.nameContains; import static net.bytebuddy.matcher.ElementMatchers.nameContains;
import static net.bytebuddy.matcher.ElementMatchers.nameMatches; import static net.bytebuddy.matcher.ElementMatchers.nameMatches;
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
@ -24,7 +23,6 @@ import net.bytebuddy.agent.builder.ResettableClassFileTransformer;
import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;
import net.bytebuddy.matcher.ElementMatchers;
import net.bytebuddy.utility.JavaModule; import net.bytebuddy.utility.JavaModule;
@Slf4j @Slf4j

View File

@ -2,6 +2,9 @@ package datadog.trace.agent.tooling;
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.failSafe; import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.failSafe;
import static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.any;
import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.not;
import datadog.trace.agent.tooling.context.FieldBackedProvider; import datadog.trace.agent.tooling.context.FieldBackedProvider;
import datadog.trace.agent.tooling.context.InstrumentationContextProvider; import datadog.trace.agent.tooling.context.InstrumentationContextProvider;
@ -73,6 +76,9 @@ public interface Instrumenter {
classLoaderMatcher(), classLoaderMatcher(),
"Instrumentation class loader matcher unexpected exception: " "Instrumentation class loader matcher unexpected exception: "
+ getClass().getName())) + getClass().getName()))
// Added here instead of AgentInstaller's ignores because it's relatively
// expensive. https://github.com/DataDog/dd-trace-java/pull/1045
.and(not(isAnnotatedWith(named("javax.decorator.Decorator"))))
.and(new MuzzleMatcher()) .and(new MuzzleMatcher())
.and(new PostMatchHook()) .and(new PostMatchHook())
.transform(DDTransformers.defaultTransformers()); .transform(DDTransformers.defaultTransformers());

View File

@ -2,6 +2,7 @@ package datadog.trace.agent.tooling.context;
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.BOOTSTRAP_CLASSLOADER; import static datadog.trace.agent.tooling.ClassLoaderMatcher.BOOTSTRAP_CLASSLOADER;
import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith;
import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.isInterface;
import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.not;
@ -354,9 +355,12 @@ public class FieldBackedProvider implements InstrumentationContextProvider {
builder = builder =
builder builder
.type( .type(
safeHasSuperType(named(entry.getKey())).and(not(isInterface())), not(isInterface()).and(safeHasSuperType(named(entry.getKey()))),
instrumenter.classLoaderMatcher()) instrumenter.classLoaderMatcher())
.and(safeToInjectFieldsMatcher()) .and(safeToInjectFieldsMatcher())
// Added here instead of AgentInstaller's ignores because it's relatively
// expensive. https://github.com/DataDog/dd-trace-java/pull/1045
.and(not(isAnnotatedWith(named("javax.decorator.Decorator"))))
.transform(AgentBuilder.Transformer.NoOp.INSTANCE); .transform(AgentBuilder.Transformer.NoOp.INSTANCE);
/** /**

View File

@ -1,5 +1,4 @@
import datadog.trace.agent.test.AgentTestRunner import datadog.trace.agent.test.AgentTestRunner
import datadog.trace.instrumentation.TestBean
import org.jboss.weld.environment.se.Weld import org.jboss.weld.environment.se.Weld
import org.jboss.weld.environment.se.WeldContainer import org.jboss.weld.environment.se.WeldContainer
import org.jboss.weld.environment.se.threading.RunnableDecorator import org.jboss.weld.environment.se.threading.RunnableDecorator

View File

@ -1,5 +1,3 @@
package datadog.trace.instrumentation;
public class TestBean { public class TestBean {
private String someField; private String someField;