Skip to content

Commit 7e5d4cc

Browse files
authored
Ensure muzzle collects VirtualFields from static initializers (#13600)
1 parent 850e86a commit 7e5d4cc

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

muzzle/src/test/java/io/opentelemetry/javaagent/tooling/muzzle/ReferenceCollectorTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,20 @@ public void shouldCollectMultipleVirtualFieldsForSingleClass() {
363363
entry(VirtualFieldTestClasses.Key1.class.getName(), State.class.getName()));
364364
}
365365

366+
@Test
367+
public void shouldCollectVirtualFieldsFromStaticInitializers() {
368+
ReferenceCollector collector = new ReferenceCollector(s -> s.endsWith("$Helper"));
369+
collector.collectReferencesFromAdvice(
370+
VirtualFieldTestClasses.VirtualFieldInStaticInitializerAdvice.class.getName());
371+
collector.prune();
372+
373+
VirtualFieldMappings virtualFieldMappings = collector.getVirtualFieldMappings();
374+
assertThat(virtualFieldMappings.entrySet())
375+
.containsExactlyInAnyOrder(
376+
entry(VirtualFieldTestClasses.Key1.class.getName(), Context.class.getName()),
377+
entry(VirtualFieldTestClasses.Key2.class.getName(), Context.class.getName()));
378+
}
379+
366380
@ParameterizedTest(name = "{0}")
367381
@MethodSource
368382
public void shouldNotCollectVirtualFieldsForInvalidScenario(

muzzle/src/test/java/io/opentelemetry/javaagent/tooling/muzzle/VirtualFieldTestClasses.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,24 @@ public static void advice() {
2121
}
2222
}
2323

24+
public static class VirtualFieldInStaticInitializerAdvice {
25+
26+
static final VirtualField<Key1, Context> FIELD_1 = VirtualField.find(Key1.class, Context.class);
27+
28+
public static class Helper {
29+
private Helper() {}
30+
31+
static final VirtualField<Key2, Context> FIELD_2 =
32+
VirtualField.find(Key2.class, Context.class);
33+
34+
public static void foo() {}
35+
}
36+
37+
public static void advice() {
38+
Helper.foo();
39+
}
40+
}
41+
2442
public static class TwoVirtualFieldsInTheSameClassAdvice {
2543
public static void advice() {
2644
VirtualField.find(Key1.class, Context.class);

0 commit comments

Comments
 (0)