diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java index 99bb4e2d53..63405cad6a 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java @@ -18,6 +18,7 @@ import java.util.ServiceLoader; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.agent.builder.ResettableClassFileTransformer; +import net.bytebuddy.description.type.TypeDefinition; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.matcher.ElementMatcher; @@ -50,6 +51,8 @@ public class AgentInstaller { final Instrumentation inst, final AgentBuilder.Listener... listeners) { INSTRUMENTATION = inst; + addByteBuddyRawSetting(); + AgentBuilder agentBuilder = new AgentBuilder.Default() .disableClassFormatChanges() @@ -93,6 +96,23 @@ public class AgentInstaller { return agentBuilder.installOn(inst); } + private static void addByteBuddyRawSetting() { + final String savedPropertyValue = System.getProperty(TypeDefinition.RAW_TYPES_PROPERTY); + try { + System.setProperty(TypeDefinition.RAW_TYPES_PROPERTY, "true"); + final boolean rawTypes = TypeDescription.AbstractBase.RAW_TYPES; + if (!rawTypes) { + log.debug("Too late to enable {}", TypeDefinition.RAW_TYPES_PROPERTY); + } + } finally { + if (savedPropertyValue == null) { + System.clearProperty(TypeDefinition.RAW_TYPES_PROPERTY); + } else { + System.setProperty(TypeDefinition.RAW_TYPES_PROPERTY, savedPropertyValue); + } + } + } + private static ElementMatcher.Junction matchesConfiguredExcludes() { final List excludedClasses = Config.get().getExcludedClasses(); ElementMatcher.Junction matcher = none();