diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/TypeTransformerImpl.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/TypeTransformerImpl.java index 1382acc66e2d..e3b6285d334b 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/TypeTransformerImpl.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/TypeTransformerImpl.java @@ -8,6 +8,7 @@ import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.tooling.Utils; import io.opentelemetry.javaagent.tooling.bytebuddy.ExceptionHandlers; +import io.opentelemetry.javaagent.tooling.instrumentation.indy.ForceDynamicallyTypedAssignReturnedFactory; import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -21,7 +22,9 @@ final class TypeTransformerImpl implements TypeTransformer { this.agentBuilder = agentBuilder; adviceMapping = Advice.withCustomMapping() - .with(new Advice.AssignReturned.Factory().withSuppressed(Throwable.class)); + .with( + new ForceDynamicallyTypedAssignReturnedFactory( + new Advice.AssignReturned.Factory().withSuppressed(Throwable.class))); } @Override diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/ForceDynamicallyTypedAssignReturnedFactory.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/ForceDynamicallyTypedAssignReturnedFactory.java index d107f08209e0..dd0c88bb4752 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/ForceDynamicallyTypedAssignReturnedFactory.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/ForceDynamicallyTypedAssignReturnedFactory.java @@ -20,6 +20,14 @@ import net.bytebuddy.implementation.bytecode.assign.Assigner; import net.bytebuddy.matcher.ElementMatchers; +/** + * This factory is designed to wrap around {@link Advice.PostProcessor.Factory} and ensures that + * {@link net.bytebuddy.implementation.bytecode.assign.Assigner.Typing#DYNAMIC} is used everywhere. + * + *
This helps by avoiding errors where the instrumented bytecode is suddenly unloadable due to + * incompatible assignments and preventing cluttering advice code annotations with the explicit + * typing. + */ public class ForceDynamicallyTypedAssignReturnedFactory implements Advice.PostProcessor.Factory { private static final String TO_ARGUMENTS_TYPENAME =