From 78289feffda9486de6ec2c3a5923d3cd4223a989 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 4 Nov 2026 10:06:47 +0100 Subject: [PATCH 1/4] fix: inherit project test JVM inclusion constraints --- .../TestJvmConstraintsPlugin.kt | 1 + .../TestJvmConstraintsPluginTest.kt | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt index 82fb3d1b1b9..df1e6804ce9 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt @@ -156,6 +156,7 @@ class TestJvmConstraintsPlugin : Plugin { .orElse(project.providers.provider { project.findProperty("${name}MaxJavaVersionForTests") as? JavaVersion }) .orElse(project.providers.provider { project.findProperty("maxJavaVersion") as? JavaVersion }) ) + taskExtension.includeJdk.convention(projectExtension.includeJdk) taskExtension.forceJdk.convention(projectExtension.forceJdk .orElse(project.providers.provider { @Suppress("UNCHECKED_CAST") diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt index f90b1fd28e5..3bf9b903257 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt @@ -144,6 +144,49 @@ class TestJvmConstraintsPluginTest { } } + @Test + fun `project includeJdk controls test task eligibility`() { + val testJvm = JavaVersion.current().majorVersion + withTestJvm(testJvm) { + val project = ProjectBuilder.builder().build() + project.pluginManager.apply("dd-trace-java.test-jvm-constraints") + val projectExtension = project.extensions.getByType(TestJvmConstraintsExtension::class.java) + projectExtension.includeJdk.set(listOf(testJvm)) + + val testTask = project.tasks.named("test", GradleTest::class.java).get() + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isTrue() + + projectExtension.includeJdk.set(listOf("ORACLE8")) + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isFalse() + } + } + + @Test + fun `task includeJdk overrides project inclusion`() { + val testJvm = JavaVersion.current().majorVersion + withTestJvm(testJvm) { + val project = ProjectBuilder.builder().build() + project.pluginManager.apply("dd-trace-java.test-jvm-constraints") + project.extensions.getByType(TestJvmConstraintsExtension::class.java).includeJdk.set(listOf("ORACLE8")) + val testTask = project.tasks.named("test", GradleTest::class.java).get() + val taskExtension = testTask.extensions.getByType(TestJvmConstraintsExtension::class.java) + + taskExtension.includeJdk.set(listOf(testJvm)) + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isTrue() + + taskExtension.includeJdk.set(listOf("ZULU8")) + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isFalse() + + taskExtension.includeJdk.set(emptyList()) + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isTrue() + } + } + @Test fun `jacoco is disabled for additional test jvm when coverage is not checked`() { val testTask = testTaskWithJacoco() From 21d3ca5c1faa907064800f06ce0a1bfc22da5e5b Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 4 Nov 2026 11:19:33 +0100 Subject: [PATCH 2/4] refactor: simplify test JVM constraint conventions --- .../TestJvmConstraintsPlugin.kt | 20 +++---------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt index df1e6804ce9..1f1129b86be 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt @@ -150,25 +150,11 @@ class TestJvmConstraintsPlugin : Plugin { ) { taskExtension.minJavaVersion.convention(projectExtension.minJavaVersion .orElse(project.providers.provider { project.findProperty("${name}MinJavaVersionForTests") as? JavaVersion }) - .orElse(project.providers.provider { project.findProperty("minJavaVersion") as? JavaVersion }) - ) - taskExtension.maxJavaVersion.convention(projectExtension.maxJavaVersion - .orElse(project.providers.provider { project.findProperty("${name}MaxJavaVersionForTests") as? JavaVersion }) - .orElse(project.providers.provider { project.findProperty("maxJavaVersion") as? JavaVersion }) ) + taskExtension.maxJavaVersion.convention(projectExtension.maxJavaVersion) + taskExtension.forceJdk.convention(projectExtension.forceJdk) taskExtension.includeJdk.convention(projectExtension.includeJdk) - taskExtension.forceJdk.convention(projectExtension.forceJdk - .orElse(project.providers.provider { - @Suppress("UNCHECKED_CAST") - project.findProperty("forceJdk") as? List ?: emptyList() - }) - ) - taskExtension.excludeJdk.convention(projectExtension.excludeJdk - .orElse(project.providers.provider { - @Suppress("UNCHECKED_CAST") - project.findProperty("excludeJdk") as? List ?: emptyList() - }) - ) + taskExtension.excludeJdk.convention(projectExtension.excludeJdk) taskExtension.allowReflectiveAccessToJdk.convention(projectExtension.allowReflectiveAccessToJdk .orElse(project.providers.provider { project.findProperty("allowReflectiveAccessToJdk") as? Boolean }) ) From 70004341bca30ec606e8ced2ae80c136756da4a2 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 4 Nov 2026 11:48:05 +0100 Subject: [PATCH 3/4] refactor: migrate remaining test JVM constraints --- .../TestJvmConstraintsPlugin.kt | 15 +++------------ dd-java-agent/agent-debugger/build.gradle | 8 +++++++- .../instrumentation/java/java-io-1.8/build.gradle | 7 +++++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt index 1f1129b86be..3ec23afb510 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt @@ -139,25 +139,16 @@ class TestJvmConstraintsPlugin : Plugin { ) } - /** - * Configures the convention, this tells Gradle where to look for values. - * - * Currently, the extension is still configured to look at project's _extra_ properties. - */ - private fun Test.configureConventions( + private fun configureConventions( taskExtension: TestJvmConstraintsExtension, projectExtension: TestJvmConstraintsExtension ) { - taskExtension.minJavaVersion.convention(projectExtension.minJavaVersion - .orElse(project.providers.provider { project.findProperty("${name}MinJavaVersionForTests") as? JavaVersion }) - ) + taskExtension.minJavaVersion.convention(projectExtension.minJavaVersion) taskExtension.maxJavaVersion.convention(projectExtension.maxJavaVersion) taskExtension.forceJdk.convention(projectExtension.forceJdk) taskExtension.includeJdk.convention(projectExtension.includeJdk) taskExtension.excludeJdk.convention(projectExtension.excludeJdk) - taskExtension.allowReflectiveAccessToJdk.convention(projectExtension.allowReflectiveAccessToJdk - .orElse(project.providers.provider { project.findProperty("allowReflectiveAccessToJdk") as? Boolean }) - ) + taskExtension.allowReflectiveAccessToJdk.convention(projectExtension.allowReflectiveAccessToJdk) taskExtension.nativeImageCapable.convention(projectExtension.nativeImageCapable) } } diff --git a/dd-java-agent/agent-debugger/build.gradle b/dd-java-agent/agent-debugger/build.gradle index a4de7c2a0cf..b9c16ef6bfe 100644 --- a/dd-java-agent/agent-debugger/build.gradle +++ b/dd-java-agent/agent-debugger/build.gradle @@ -100,4 +100,10 @@ tasks.named("jar", Jar) { } // we want to test with no special reflective access (no --add-opens) -ext.allowReflectiveAccessToJdk = false +allprojects { debuggerProject -> + debuggerProject.pluginManager.withPlugin('dd-trace-java.test-jvm-constraints') { + debuggerProject.testJvmConstraints { + allowReflectiveAccessToJdk = false + } + } +} diff --git a/dd-java-agent/instrumentation/java/java-io-1.8/build.gradle b/dd-java-agent/instrumentation/java/java-io-1.8/build.gradle index acaa3054fb0..cd7e9be4cf5 100644 --- a/dd-java-agent/instrumentation/java/java-io-1.8/build.gradle +++ b/dd-java-agent/instrumentation/java/java-io-1.8/build.gradle @@ -12,8 +12,11 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('java11Test', 'java11Test') -// java11Test only runs on JDK 11+; the testJvmConstraints plugin reads this property by convention -ext.java11TestMinJavaVersionForTests = JavaVersion.VERSION_11 +tasks.named("java11Test", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} tasks.named("compileJava11TestJava", JavaCompile) { configureCompiler(it, JavaVersion.VERSION_11) From 7ab4682196c1178a9469396dfa1590932a510e58 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 4 Nov 2026 13:39:42 +0100 Subject: [PATCH 4/4] refactor: configure debugger reflection tests locally --- dd-java-agent/agent-debugger/build.gradle | 8 ++------ .../agent-debugger/debugger-bootstrap/build.gradle | 4 ++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dd-java-agent/agent-debugger/build.gradle b/dd-java-agent/agent-debugger/build.gradle index b9c16ef6bfe..4bfa146df93 100644 --- a/dd-java-agent/agent-debugger/build.gradle +++ b/dd-java-agent/agent-debugger/build.gradle @@ -100,10 +100,6 @@ tasks.named("jar", Jar) { } // we want to test with no special reflective access (no --add-opens) -allprojects { debuggerProject -> - debuggerProject.pluginManager.withPlugin('dd-trace-java.test-jvm-constraints') { - debuggerProject.testJvmConstraints { - allowReflectiveAccessToJdk = false - } - } +testJvmConstraints { + allowReflectiveAccessToJdk = false } diff --git a/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle b/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle index 36a578f59bd..0531d0a9b39 100644 --- a/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle +++ b/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle @@ -3,6 +3,10 @@ plugins { id 'dd-trace-java.module.bootstrap-component' } +testJvmConstraints { + allowReflectiveAccessToJdk = false +} + // Most of the classes are just object model // Those which needs test coverage, test classes are in agent-debugger project // to avoid pull dependencies