Skip to content

Commit 48d943c

Browse files
committed
Replace reflection with test accessor method
1 parent 03c49f7 commit 48d943c

File tree

2 files changed

+14
-16
lines changed

2 files changed

+14
-16
lines changed

instrumentation/internal/internal-class-loader/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/DefineClassInstrumentationTest.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.io.ByteArrayOutputStream;
1414
import java.io.IOException;
1515
import java.io.InputStream;
16-
import java.lang.reflect.Field;
1716
import java.security.ProtectionDomain;
1817
import org.apache.commons.compress.utils.IOUtils;
1918
import org.junit.jupiter.params.ParameterizedTest;
@@ -63,7 +62,7 @@ void ensureDefineClassInstrumented(int argCount) throws IOException {
6362
mockHandler.beforeDefineClass(cl, className, bytecode, 0, bytecode.length);
6463
Mockito.reset(mockHandler);
6564

66-
DefineClassHelper.Handler originalHandler = forceSetDefineClassHelper(mockHandler);
65+
DefineClassHelper.Handler originalHandler = DefineClassHelper.internalSetHandlerForTests(mockHandler);
6766
String expectedClassName;
6867
try {
6968
switch (argCount) {
@@ -83,25 +82,12 @@ void ensureDefineClassInstrumented(int argCount) throws IOException {
8382
throw new IllegalStateException();
8483
}
8584
} finally {
86-
forceSetDefineClassHelper(originalHandler);
85+
DefineClassHelper.internalSetHandlerForTests(originalHandler);
8786
}
8887

8988
verify(mockHandler)
9089
.beforeDefineClass(
9190
same(cl), eq(expectedClassName), eq(bytecode), eq(0), eq(bytecode.length));
9291
verify(mockHandler).afterDefineClass(eq(null));
9392
}
94-
95-
private static DefineClassHelper.Handler forceSetDefineClassHelper(
96-
DefineClassHelper.Handler newHandler) {
97-
try {
98-
Field handler = DefineClassHelper.class.getDeclaredField("handler");
99-
handler.setAccessible(true);
100-
DefineClassHelper.Handler previous = (DefineClassHelper.Handler) handler.get(null);
101-
handler.set(null, newHandler);
102-
return previous;
103-
} catch (Exception e) {
104-
throw new IllegalStateException(e);
105-
}
106-
}
10793
}

javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/DefineClassHelper.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,17 @@ public static void internalSetHandler(Handler handler) {
7070
DefineClassHelper.handler = handler;
7171
}
7272

73+
/**
74+
* Only for testing. In contrast to {@link #internalSetHandler(Handler)} allows replacing the handler
75+
* if it already has been set.
76+
* @param handler the handler to set
77+
* @return the previously active handler
78+
*/
79+
public static Handler internalSetHandlerForTests(Handler handler) {
80+
Handler oldHandler = DefineClassHelper.handler;
81+
DefineClassHelper.handler = handler;
82+
return oldHandler;
83+
}
84+
7385
private DefineClassHelper() {}
7486
}

0 commit comments

Comments
 (0)