diff --git a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java index 9132652d2c8..eb48454ba6d 100644 --- a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java +++ b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java @@ -23,9 +23,7 @@ public final class OtelInstrumentationMapper extends ClassRemapper { Arrays.asList("io/opentelemetry/javaagent/tooling/muzzle/InstrumentationModuleMuzzle")); private static final Set UNSUPPORTED_METHODS = - new HashSet<>( - Arrays.asList( - "getMuzzleReferences", "getMuzzleHelperClassNames", "registerMuzzleVirtualFields")); + new HashSet<>(Arrays.asList("getMuzzleReferences", "registerMuzzleVirtualFields")); public OtelInstrumentationMapper(ClassVisitor classVisitor) { super(classVisitor, Renamer.INSTANCE); diff --git a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumenterModule.java b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumenterModule.java index e88d2c09264..7011106f192 100644 --- a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumenterModule.java +++ b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumenterModule.java @@ -2,6 +2,9 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.InstrumenterConfig; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * Replaces OpenTelemetry's {@code InstrumentationModule} when mapping extensions. @@ -30,4 +33,33 @@ private static String[] namespace(String[] names) { } return namespaced; } + + @Override + public String[] helperClassNames() { + List helperClassNames; + List additionalClassNames = getAdditionalHelperClassNames(); + if (additionalClassNames.isEmpty()) { + // no additional names, just use those captured at build time + helperClassNames = getMuzzleHelperClassNames(); + } else { + // combine names captured at build time with additional names + helperClassNames = new ArrayList<>(getMuzzleHelperClassNames()); + helperClassNames.addAll(additionalClassNames); + } + if (helperClassNames.isEmpty()) { + return NO_HELPERS; + } else { + return helperClassNames.toArray(new String[0]); + } + } + + /** This method is generated by OpenTelemetry's muzzle plugin at build time. */ + public List getMuzzleHelperClassNames() { + return Collections.emptyList(); + } + + /** Extensions override this to supply names not covered by the muzzle plugin. */ + public List getAdditionalHelperClassNames() { + return Collections.emptyList(); + } } diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java index 8b6315b8225..f1afd39e2f7 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java @@ -54,6 +54,8 @@ public enum TargetSystem { private static final Logger log = LoggerFactory.getLogger(InstrumenterModule.class); + protected static final String[] NO_HELPERS = {}; + private final List instrumentationNames; private final String instrumentationPrimaryName; private final boolean enabled; @@ -106,7 +108,7 @@ public static ReferenceMatcher loadStaticMuzzleReferences( /** @return Class names of helpers to inject into the user's classloader */ public String[] helperClassNames() { - return new String[0]; + return NO_HELPERS; } /**