From 4363ab3a26067d52962c7a9cdfeee42a709066a4 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Wed, 10 Jun 2026 16:10:35 +0200 Subject: [PATCH 1/3] fix: disable invokedynamic compilation for legacy gradle instrumentation --- .../instrumentation/gradle/gradle-3.0/build.gradle | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dd-java-agent/instrumentation/gradle/gradle-3.0/build.gradle b/dd-java-agent/instrumentation/gradle/gradle-3.0/build.gradle index 22fa1b97ca4..bb9bb62e9f2 100644 --- a/dd-java-agent/instrumentation/gradle/gradle-3.0/build.gradle +++ b/dd-java-agent/instrumentation/gradle/gradle-3.0/build.gradle @@ -9,3 +9,15 @@ repositories { dependencies { compileOnly gradleApi() } + +// This module's Groovy classes are loaded into the user's Gradle daemon, which for +// Gradle 6.x bundles Groovy 2.5. Groovy 4 (bundled by the build's Gradle 9+) compiles +// invokedynamic by default, binding dynamic calls to +// org.codehaus.groovy.vmplugin.v8.IndyInterface — a class that only exists from Groovy +// 3.0 onwards. Under Groovy 2.5 that bootstrap target is missing, so the classes fail +// to link and CI Visibility never instruments the build. Force classic call-site +// dispatch so the emitted bytecode links on older daemons regardless of the build's +// bundled Groovy version. +tasks.withType(GroovyCompile).configureEach { + groovyOptions.optimizationOptions.indy = false +} From f7b46a22f96e558688f3503b4dd9030a44df353f Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Wed, 10 Jun 2026 16:26:57 +0200 Subject: [PATCH 2/3] nit: comment --- .../instrumentation/gradle/gradle-3.0/build.gradle | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dd-java-agent/instrumentation/gradle/gradle-3.0/build.gradle b/dd-java-agent/instrumentation/gradle/gradle-3.0/build.gradle index bb9bb62e9f2..dd59affe950 100644 --- a/dd-java-agent/instrumentation/gradle/gradle-3.0/build.gradle +++ b/dd-java-agent/instrumentation/gradle/gradle-3.0/build.gradle @@ -10,11 +10,10 @@ dependencies { compileOnly gradleApi() } -// This module's Groovy classes are loaded into the user's Gradle daemon, which for -// Gradle 6.x bundles Groovy 2.5. Groovy 4 (bundled by the build's Gradle 9+) compiles -// invokedynamic by default, binding dynamic calls to +// This module's Groovy classes are loaded into the user's Gradle daemon, which might bundle Groovy <3.0 (Gradle <7.x). +// Groovy 4 (bundled by the build's Gradle 9+) compiles invokedynamic by default, binding dynamic calls to // org.codehaus.groovy.vmplugin.v8.IndyInterface — a class that only exists from Groovy -// 3.0 onwards. Under Groovy 2.5 that bootstrap target is missing, so the classes fail +// 3.0 onwards. Under Groovy <3.0 that bootstrap target is missing, so the classes fail // to link and CI Visibility never instruments the build. Force classic call-site // dispatch so the emitted bytecode links on older daemons regardless of the build's // bundled Groovy version. From e35981ab21f2ed0878690250f5deb759ade78ee5 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Wed, 10 Jun 2026 16:27:09 +0200 Subject: [PATCH 3/3] test: bump oldest test case to 4.x --- .../src/test/java/datadog/smoketest/GradleDaemonSmokeTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/GradleDaemonSmokeTest.java b/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/GradleDaemonSmokeTest.java index add663ebaa8..54c7cb02008 100644 --- a/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/GradleDaemonSmokeTest.java +++ b/dd-smoke-tests/gradle/src/test/java/datadog/smoketest/GradleDaemonSmokeTest.java @@ -64,7 +64,7 @@ void stopGradleTestKitDaemons() { @TableTest({ "scenario | gradleVersion | projectName | successExpected | expectedTraces | expectedCoverages", - "succeed-old-gradle-3.5 | 3.5 | test-succeed-old-gradle | true | 5 | 1 ", + "succeed-old-gradle-4.10 | 4.10 | test-succeed-old-gradle | true | 5 | 1 ", "succeed-legacy | 7.6.4 | test-succeed-legacy-instrumentation | true | 5 | 1 ", "succeed-multi-module-legacy | 7.6.4 | test-succeed-multi-module-legacy-instrumentation | true | 7 | 2 ", "succeed-multi-forks-legacy | 7.6.4 | test-succeed-multi-forks-legacy-instrumentation | true | 6 | 2 ",