From 54be51f488b5d68f960f540c3a97bee88559f329 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Tue, 7 Oct 2025 18:28:09 +0200 Subject: [PATCH] convert to java --- .../javaagent-tooling-java9/build.gradle.kts | 8 +++++ .../javaagent/tooling/UnsafeInitializer.java | 3 +- .../src/test/groovy/UnsafeTest.groovy | 23 ------------- .../javaagent/tooling/UnsafeTest.java | 32 +++++++++++++++++++ 4 files changed, 42 insertions(+), 24 deletions(-) delete mode 100644 javaagent-tooling/javaagent-tooling-java9/src/test/groovy/UnsafeTest.groovy create mode 100644 javaagent-tooling/javaagent-tooling-java9/src/test/java/io/opentelemetry/javaagent/tooling/UnsafeTest.java diff --git a/javaagent-tooling/javaagent-tooling-java9/build.gradle.kts b/javaagent-tooling/javaagent-tooling-java9/build.gradle.kts index d1a54f2e7e7f..47984f346e61 100644 --- a/javaagent-tooling/javaagent-tooling-java9/build.gradle.kts +++ b/javaagent-tooling/javaagent-tooling-java9/build.gradle.kts @@ -29,4 +29,12 @@ tasks { compilerArgs.add("-Xlint:none") } } + compileTestJava { + with(options) { + // Because this module targets Java 9, we trigger this compiler bug which was fixed but not + // backported to Java 9 compilation. + // https://bugs.openjdk.java.net/browse/JDK-8209058 + compilerArgs.add("-Xlint:none") + } + } } diff --git a/javaagent-tooling/javaagent-tooling-java9/src/main/java/io/opentelemetry/javaagent/tooling/UnsafeInitializer.java b/javaagent-tooling/javaagent-tooling-java9/src/main/java/io/opentelemetry/javaagent/tooling/UnsafeInitializer.java index 7f81277f154d..69a9a76a2d79 100644 --- a/javaagent-tooling/javaagent-tooling-java9/src/main/java/io/opentelemetry/javaagent/tooling/UnsafeInitializer.java +++ b/javaagent-tooling/javaagent-tooling-java9/src/main/java/io/opentelemetry/javaagent/tooling/UnsafeInitializer.java @@ -22,7 +22,8 @@ static void initialize(Instrumentation instrumentation, ClassLoader classLoader) initialize(instrumentation, classLoader, true); } - private static void initialize( + // visible for testing + static void initialize( Instrumentation instrumentation, ClassLoader classLoader, boolean testUnsafePresent) { Class unsafeClass; try { diff --git a/javaagent-tooling/javaagent-tooling-java9/src/test/groovy/UnsafeTest.groovy b/javaagent-tooling/javaagent-tooling-java9/src/test/groovy/UnsafeTest.groovy deleted file mode 100644 index 671be3c55d5c..000000000000 --- a/javaagent-tooling/javaagent-tooling-java9/src/test/groovy/UnsafeTest.groovy +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.javaagent.bootstrap.AgentClassLoader -import io.opentelemetry.javaagent.tooling.UnsafeInitializer -import net.bytebuddy.agent.ByteBuddyAgent -import spock.lang.Specification - -class UnsafeTest extends Specification { - - def "test generate sun.misc.Unsafe"() { - setup: - ByteBuddyAgent.install() - URL testJarLocation = AgentClassLoader.getProtectionDomain().getCodeSource().getLocation() - AgentClassLoader loader = new AgentClassLoader(new File(testJarLocation.toURI())) - UnsafeInitializer.initialize(ByteBuddyAgent.getInstrumentation(), loader, false) - - expect: - loader.loadClass("sun.misc.Unsafe").getClassLoader() == loader - } -} diff --git a/javaagent-tooling/javaagent-tooling-java9/src/test/java/io/opentelemetry/javaagent/tooling/UnsafeTest.java b/javaagent-tooling/javaagent-tooling-java9/src/test/java/io/opentelemetry/javaagent/tooling/UnsafeTest.java new file mode 100644 index 000000000000..373fc6e59615 --- /dev/null +++ b/javaagent-tooling/javaagent-tooling-java9/src/test/java/io/opentelemetry/javaagent/tooling/UnsafeTest.java @@ -0,0 +1,32 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.tooling; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.javaagent.bootstrap.AgentClassLoader; +import java.io.File; +import java.net.URL; +import net.bytebuddy.agent.ByteBuddyAgent; +import org.junit.jupiter.api.Test; + +class UnsafeTest { + + @Test + void testGenerateSunMiscUnsafe() throws Exception { + ByteBuddyAgent.install(); + URL testJarLocation = + AgentClassLoader.class.getProtectionDomain().getCodeSource().getLocation(); + + try (AgentClassLoader loader = new AgentClassLoader(new File(testJarLocation.toURI()))) { + UnsafeInitializer.initialize(ByteBuddyAgent.getInstrumentation(), loader, false); + + Class unsafeClass = loader.loadClass("sun.misc.Unsafe"); + + assertThat(unsafeClass.getClassLoader()).isEqualTo(loader); + } + } +}