Skip to content

Commit b9fefdd

Browse files
committed
removed type erasure workaorund
1 parent ff331d8 commit b9fefdd

File tree

5 files changed

+50
-132
lines changed

5 files changed

+50
-132
lines changed

dependencyManagement/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ val DEPENDENCY_BOMS = listOf(
4141
val autoServiceVersion = "1.1.1"
4242
val autoValueVersion = "1.11.0"
4343
val errorProneVersion = "2.36.0"
44-
val byteBuddyVersion = "1.15.11"
44+
val byteBuddyVersion = "1.15.12-SNAPSHOT"
4545
val asmVersion = "9.7.1"
4646
val jmhVersion = "1.37"
4747
val mockitoVersion = "4.11.0"
@@ -62,7 +62,7 @@ val CORE_DEPENDENCIES = listOf(
6262
"net.bytebuddy:byte-buddy:${byteBuddyVersion}",
6363
"net.bytebuddy:byte-buddy-dep:${byteBuddyVersion}",
6464
"net.bytebuddy:byte-buddy-agent:${byteBuddyVersion}",
65-
"net.bytebuddy:byte-buddy-gradle-plugin:${byteBuddyVersion}",
65+
"net.bytebuddy:byte-buddy-gradle-plugin:1.15.11",
6666
"org.ow2.asm:asm:${asmVersion}",
6767
"org.ow2.asm:asm-tree:${asmVersion}",
6868
"org.ow2.asm:asm-util:${asmVersion}",

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/AdviceSignatureEraser.java

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

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/IndyBootstrap.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import java.util.logging.Logger;
2121
import javax.annotation.Nullable;
2222
import net.bytebuddy.asm.Advice;
23-
import net.bytebuddy.description.annotation.AnnotationDescription;
24-
import net.bytebuddy.description.method.MethodDescription;
2523
import net.bytebuddy.utility.JavaConstant;
2624

2725
/**
@@ -229,19 +227,10 @@ static Advice.BootstrapArgumentResolver.Factory getAdviceBootstrapArguments(
229227
Arrays.asList(
230228
JavaConstant.Simple.ofLoaded(BOOTSTRAP_KIND_ADVICE),
231229
JavaConstant.Simple.ofLoaded(moduleName),
232-
JavaConstant.Simple.ofLoaded(getOriginalSignature(adviceMethod)),
230+
JavaConstant.Simple.ofLoaded(adviceMethod.getDescriptor()),
233231
JavaConstant.Simple.ofLoaded(adviceMethod.getDeclaringType().getName()));
234232
}
235233

236-
private static String getOriginalSignature(MethodDescription.InDefinedShape adviceMethod) {
237-
for (AnnotationDescription an : adviceMethod.getDeclaredAnnotations()) {
238-
if (OriginalDescriptor.class.getName().equals(an.getAnnotationType().getName())) {
239-
return (String) an.getValue("value").resolve();
240-
}
241-
}
242-
throw new IllegalStateException("OriginalSignature annotation is not present!");
243-
}
244-
245234
private static ConstantCallSite bootstrapProxyMethod(
246235
MethodHandles.Lookup lookup,
247236
String proxyMethodName,

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/IndyTypeTransformerImpl.java

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,15 @@
1313
import net.bytebuddy.agent.builder.AgentBuilder;
1414
import net.bytebuddy.asm.Advice;
1515
import net.bytebuddy.description.method.MethodDescription;
16+
import net.bytebuddy.description.type.TypeDescription;
1617
import net.bytebuddy.dynamic.ClassFileLocator;
1718
import net.bytebuddy.dynamic.ClassFileLocator.Resolution;
1819
import net.bytebuddy.matcher.ElementMatcher;
1920

2021
public final class IndyTypeTransformerImpl implements TypeTransformer {
22+
23+
private static final TypeDescription.Generic OBJECT_TYPE = TypeDescription.ForLoadedType.of(Object.class).asGenericType();
24+
2125
// path (with trailing slash) to dump transformed advice class to
2226
private static final String DUMP_PATH = null;
2327
private final Advice.WithCustomMapping adviceMapping;
@@ -35,7 +39,49 @@ public IndyTypeTransformerImpl(
3539
new Advice.AssignReturned.Factory().withSuppressed(Throwable.class)))
3640
.bootstrap(
3741
IndyBootstrap.getIndyBootstrapMethod(),
38-
IndyBootstrap.getAdviceBootstrapArguments(instrumentationModule));
42+
IndyBootstrap.getAdviceBootstrapArguments(instrumentationModule),
43+
new TypeDescription.Generic.Visitor<TypeDescription.Generic>() {
44+
@Override
45+
public TypeDescription.Generic onGenericArray(TypeDescription.Generic generic) {
46+
return reduceErasedType(generic.asErasure());
47+
}
48+
49+
@Override
50+
public TypeDescription.Generic onWildcard(TypeDescription.Generic generic) {
51+
return reduceErasedType(generic.asErasure());
52+
}
53+
54+
@Override
55+
public TypeDescription.Generic onParameterizedType(TypeDescription.Generic generic) {
56+
return reduceErasedType(generic.asErasure());
57+
}
58+
59+
@Override
60+
public TypeDescription.Generic onTypeVariable(TypeDescription.Generic generic) {
61+
return reduceErasedType(generic.asErasure());
62+
}
63+
64+
@Override
65+
public TypeDescription.Generic onNonGenericType(TypeDescription.Generic generic) {
66+
return reduceErasedType(generic.asErasure());
67+
}
68+
69+
private TypeDescription.Generic reduceErasedType(TypeDescription erased) {
70+
if (erased.isPrimitive()) {
71+
return erased.asGenericType();
72+
}
73+
if (erased.isArray()) {
74+
return TypeDescription.Generic.Builder.of(reduceErasedType(erased.getComponentType()))
75+
.asArray()
76+
.build();
77+
}
78+
if (!erased.getName().startsWith("java.")) {
79+
return OBJECT_TYPE;
80+
}
81+
return erased.asGenericType();
82+
}
83+
}
84+
);
3985
}
4086

4187
@Override
@@ -106,7 +152,6 @@ public byte[] resolve() {
106152
} else {
107153
result = bytes;
108154
}
109-
result = AdviceSignatureEraser.transform(result);
110155
return result;
111156
}
112157
}

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/OriginalDescriptor.java

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

0 commit comments

Comments
 (0)