Skip to content

Commit 43073e7

Browse files
authored
Allow transforming classes with missing field types (#8393)
1 parent 50ca91d commit 43073e7

File tree

3 files changed

+11
-93
lines changed

3 files changed

+11
-93
lines changed

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import io.opentelemetry.javaagent.tooling.asyncannotationsupport.WeakRefAsyncOperationEndStrategies;
3232
import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesBuilderImpl;
3333
import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesConfigurer;
34-
import io.opentelemetry.javaagent.tooling.bytebuddy.SafeTypeStrategy;
3534
import io.opentelemetry.javaagent.tooling.config.AgentConfig;
3635
import io.opentelemetry.javaagent.tooling.config.ConfigPropertiesBridge;
3736
import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig;
@@ -59,6 +58,8 @@
5958
import net.bytebuddy.description.type.TypeDefinition;
6059
import net.bytebuddy.description.type.TypeDescription;
6160
import net.bytebuddy.dynamic.DynamicType;
61+
import net.bytebuddy.dynamic.VisibilityBridgeStrategy;
62+
import net.bytebuddy.dynamic.scaffold.InstrumentedType;
6263
import net.bytebuddy.dynamic.scaffold.MethodGraph;
6364
import net.bytebuddy.utility.JavaModule;
6465

@@ -131,11 +132,12 @@ private static void installBytebuddyAgent(
131132
new AgentBuilder.Default(
132133
// default method graph compiler inspects the class hierarchy, we don't need it, so
133134
// we use a simpler and faster strategy instead
134-
new ByteBuddy().with(MethodGraph.Compiler.ForDeclaredMethods.INSTANCE))
135+
new ByteBuddy()
136+
.with(MethodGraph.Compiler.ForDeclaredMethods.INSTANCE)
137+
.with(VisibilityBridgeStrategy.Default.NEVER)
138+
.with(InstrumentedType.Factory.Default.FROZEN))
139+
.with(AgentBuilder.TypeStrategy.Default.DECORATE)
135140
.disableClassFormatChanges()
136-
// disableClassFormatChanges sets type strategy to TypeStrategy.Default.REDEFINE_FROZEN
137-
// we'll wrap it with our own strategy
138-
.with(new SafeTypeStrategy(AgentBuilder.TypeStrategy.Default.REDEFINE_FROZEN))
139141
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
140142
.with(new RedefinitionDiscoveryStrategy())
141143
.with(AgentBuilder.DescriptionStrategy.Default.POOL_ONLY)

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/bytebuddy/SafeTypeStrategy.java

Lines changed: 0 additions & 86 deletions
This file was deleted.

javaagent-tooling/src/testMissingType/java/io/opentelemetry/javaagent/tooling/bytebuddy/MissingTypeTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ static void setUp() {
3636
AgentBuilder builder =
3737
new AgentBuilder.Default(
3838
new ByteBuddy().with(MethodGraph.Compiler.ForDeclaredMethods.INSTANCE))
39+
.with(AgentBuilder.TypeStrategy.Default.DECORATE)
3940
.disableClassFormatChanges()
40-
.with(new SafeTypeStrategy(AgentBuilder.TypeStrategy.Default.REDEFINE_FROZEN))
4141
.with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
4242
.with(
4343
new AgentBuilder.Listener.Adapter() {
@@ -92,8 +92,10 @@ void hasNoErrors() {
9292
}
9393

9494
// com.google.common.base.Joiner is missing from runtime class path
95-
@SuppressWarnings({"UnusedMethod", "MethodCanBeStatic"})
95+
@SuppressWarnings({"UnusedMethod", "UnusedVariable", "MethodCanBeStatic"})
9696
private static class SomeClass {
97+
public Joiner joiner;
98+
9799
public static boolean isInstrumented() {
98100
return false;
99101
}

0 commit comments

Comments
 (0)