Skip to content

Commit 532ee38

Browse files
authored
Use ClassFile parser when pre-loading class hierarchies (#9969)
1 parent d87cee2 commit 532ee38

File tree

1 file changed

+5
-4
lines changed
  • dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/memoize

1 file changed

+5
-4
lines changed

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/memoize/PreloadHierarchy.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package datadog.trace.agent.tooling.bytebuddy.memoize;
22

3+
import datadog.instrument.classmatch.ClassFile;
4+
import datadog.instrument.classmatch.ClassHeader;
35
import datadog.trace.bootstrap.instrumentation.classloading.ClassDefining;
4-
import net.bytebuddy.jar.asm.ClassReader;
56

67
/** Ensures superclasses and interfaces are loaded before classes that extend/implement them. */
78
final class PreloadHierarchy implements ClassDefining.Observer {
@@ -22,12 +23,12 @@ public void beforeDefineClass(ClassLoader loader, byte[] bytecode, int offset, i
2223
return; // ignore non-standard formats like J9 ROMs
2324
}
2425
// minimal parsing of bytecode to get name of superclass and any interfaces
25-
ClassReader cr = new ClassReader(bytecode, offset, length);
26-
String superName = cr.getSuperName();
26+
ClassHeader header = ClassFile.header(bytecode, offset);
27+
String superName = header.superName;
2728
if (null != superName && !"java/lang/Object".equals(superName)) {
2829
preload(loader, superName);
2930
}
30-
for (String interfaceName : cr.getInterfaces()) {
31+
for (String interfaceName : header.interfaces) {
3132
preload(loader, interfaceName);
3233
}
3334
} catch (Throwable ignore) {

0 commit comments

Comments
 (0)