From da9008b6792c0336b8bbb999c2d303d3fcf64791 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Fri, 7 Aug 2026 15:19:19 -0400 Subject: [PATCH 1/2] Update formatters to latest version. Move versions to catalog. Minor reformatting of code. --- build.gradle.kts | 11 +++++------ .../call-site-instrumentation-plugin/build.gradle.kts | 2 +- .../app/controllers/HomeController.scala | 2 +- .../src/akka23Test/scala/AkkaActors.scala | 2 +- .../src/baseTest/scala/AkkaHttpTestWebServer.scala | 4 ++-- .../src/test/scala/PekkoActors.scala | 2 +- .../src/baseTest/scala/PekkoHttpTestWebServer.scala | 2 +- .../weaver/WeaverIntegrationTestRunner.scala | 2 +- .../zio/zio-2.0/src/test/scala/ZioTestFixtures.scala | 6 +++--- .../play-2.4/app/filters/AbstractFilter.scala | 2 +- .../trace/core/baggage/BaggagePropagatorTest.java | 4 ++-- .../core/tagprocessor/SpanPointersProcessorTest.java | 2 +- gradle/enforcement/spotless-scalafmt.conf | 3 ++- gradle/libs.versions.toml | 6 ++++++ gradle/spotless.gradle | 11 +++++------ .../trace/util/CaseInsensitiveMapBenchmark.java | 2 -- .../jmh/java/datadog/trace/util/HashingBenchmark.java | 2 -- .../datadog/trace/util/ThreadSafeMapBenchmark.java | 2 -- test-published-dependencies/build.gradle.kts | 4 ++-- test-published-dependencies/settings.gradle.kts | 8 ++++++++ 20 files changed, 43 insertions(+), 36 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f9e6fd40801..63acca47bfd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,8 +39,8 @@ with(extensions["spotlessPredeclare"] as SpotlessExtension) { java { removeUnusedImports() - googleJavaFormat("1.35.0") - tableTestFormatter("1.1.1") + googleJavaFormat(libs.versions.google.java.format.get()) + tableTestFormatter(libs.versions.tabletest.formatter.get()) } groovyGradle { greclipse() @@ -49,14 +49,13 @@ with(extensions["spotlessPredeclare"] as SpotlessExtension) { greclipse() } kotlinGradle { - ktlint("1.8.0") + ktlint(libs.versions.ktlint.get()) } kotlin { - ktlint("1.8.0") + ktlint(libs.versions.ktlint.get()) } scala { - // TODO: For some reason Scala format is working correctly with this version only. - scalafmt("3.8.6") + scalafmt(libs.versions.scalafmt.get()) } } apply(from = rootDir.resolve("gradle/spotless.gradle")) diff --git a/buildSrc/call-site-instrumentation-plugin/build.gradle.kts b/buildSrc/call-site-instrumentation-plugin/build.gradle.kts index 80097f55629..bd36f275672 100644 --- a/buildSrc/call-site-instrumentation-plugin/build.gradle.kts +++ b/buildSrc/call-site-instrumentation-plugin/build.gradle.kts @@ -20,7 +20,7 @@ spotless { target("src/**/*.java") // ignore embedded test projects targetExclude("src/test/resources/**") - googleJavaFormat("1.35.0") + googleJavaFormat(libs.versions.google.java.format.get()) } } diff --git a/dd-java-agent/benchmark-integration/play-perftest/app/controllers/HomeController.scala b/dd-java-agent/benchmark-integration/play-perftest/app/controllers/HomeController.scala index 845e197eafa..bde56c7ac07 100644 --- a/dd-java-agent/benchmark-integration/play-perftest/app/controllers/HomeController.scala +++ b/dd-java-agent/benchmark-integration/play-perftest/app/controllers/HomeController.scala @@ -18,7 +18,7 @@ class HomeController @Inject() (cc: ControllerComponents) extends AbstractContro implicit request: Request[AnyContent] => error match { case Some(x) => throw new RuntimeException("some sync error") - case None => { + case None => { var workTime = workTimeMS.getOrElse(0L) scheduleWork(workTime) Ok("Did " + workTime + "ms of work.") diff --git a/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/akka23Test/scala/AkkaActors.scala b/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/akka23Test/scala/AkkaActors.scala index 7dc5e1741df..912506af26f 100644 --- a/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/akka23Test/scala/AkkaActors.scala +++ b/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/akka23Test/scala/AkkaActors.scala @@ -16,7 +16,7 @@ import scala.concurrent.duration._ class AkkaActors extends AutoCloseable { val system: ActorSystem = ActorSystem("akka-actors-test") - val receiver: ActorRef = + val receiver: ActorRef = system.actorOf(Receiver.props, "receiver") val forwarder: ActorRef = system.actorOf(Forwarder.props(receiver), "forwarder") diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/scala/AkkaHttpTestWebServer.scala b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/scala/AkkaHttpTestWebServer.scala index 1e712d1d7aa..4c6d5b3f142 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/scala/AkkaHttpTestWebServer.scala +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/scala/AkkaHttpTestWebServer.scala @@ -354,8 +354,8 @@ object AkkaHttpTestWebServer { resp.withEntity(uri.queryString().orNull) case REDIRECT => resp.withHeaders(headers.Location(endpoint.getBody)) - case ERROR => resp.withEntity(endpoint.getBody) - case EXCEPTION => throw new Exception(endpoint.getBody) + case ERROR => resp.withEntity(endpoint.getBody) + case EXCEPTION => throw new Exception(endpoint.getBody) case USER_BLOCK => { Blocking.forUser("user-to-block").blockIfMatch() // should never be output: diff --git a/dd-java-agent/instrumentation/pekko/pekko-concurrent-1.0/src/test/scala/PekkoActors.scala b/dd-java-agent/instrumentation/pekko/pekko-concurrent-1.0/src/test/scala/PekkoActors.scala index 47f6f2118aa..fa4aa877d6d 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-concurrent-1.0/src/test/scala/PekkoActors.scala +++ b/dd-java-agent/instrumentation/pekko/pekko-concurrent-1.0/src/test/scala/PekkoActors.scala @@ -18,7 +18,7 @@ import scala.concurrent.duration._ class PekkoActors extends AutoCloseable { val system: ActorSystem = ActorSystem("pekko-actors-test") - val receiver: ActorRef = + val receiver: ActorRef = system.actorOf(Receiver.props, "receiver") val forwarder: ActorRef = system.actorOf(Forwarder.props(receiver), "forwarder") diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/scala/PekkoHttpTestWebServer.scala b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/scala/PekkoHttpTestWebServer.scala index 54a4983daff..300e84478ad 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/scala/PekkoHttpTestWebServer.scala +++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/scala/PekkoHttpTestWebServer.scala @@ -245,7 +245,7 @@ object PekkoHttpTestWebServer { resp.withHeaders(headers.Location(endpoint.getBody)) case ERROR => resp.withEntity(endpoint.getBody) case EXCEPTION => throw new Exception(endpoint.getBody) - case _ => + case _ => if (path.startsWith("/injected-id/")) { val groups = path.split('/') if (groups.size == 4) { // The path starts with a / and has 3 segments diff --git a/dd-java-agent/instrumentation/weaver-0.9/src/main/scala/datadog/trace/instrumentation/weaver/WeaverIntegrationTestRunner.scala b/dd-java-agent/instrumentation/weaver-0.9/src/main/scala/datadog/trace/instrumentation/weaver/WeaverIntegrationTestRunner.scala index b2579a4526f..eda6ef15dbf 100644 --- a/dd-java-agent/instrumentation/weaver-0.9/src/main/scala/datadog/trace/instrumentation/weaver/WeaverIntegrationTestRunner.scala +++ b/dd-java-agent/instrumentation/weaver-0.9/src/main/scala/datadog/trace/instrumentation/weaver/WeaverIntegrationTestRunner.scala @@ -46,7 +46,7 @@ object WeaverIntegrationTestRunner { val framework = new CatsEffect(new PrintStream(System.out)) val runner = framework.runner(Array.empty, Array.empty, getClass.getClassLoader) val scalaTestNames: List[String] = testNames.asScala.toList - val taskDefs: Array[TaskDef] = scalaTestNames.map { name => + val taskDefs: Array[TaskDef] = scalaTestNames.map { name => new TaskDef(name, SuiteFingerprint, false, Array(new SuiteSelector())) }.toArray val tasks = runner.tasks(taskDefs) diff --git a/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala b/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala index 335e2b9bdbb..bb2c81cf82c 100644 --- a/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala +++ b/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala @@ -19,7 +19,7 @@ object ZioTestFixtures { run { for { childStarted <- Promise.make[Nothing, Unit] - _ <- childSpan("fiber_1_span_1") { + _ <- childSpan("fiber_1_span_1") { for { child <- childSpan("fiber_2_span_1") { childStarted.succeed(()) *> @@ -117,7 +117,7 @@ object ZioTestFixtures { private def childSpan(opName: String)(op: UIO[Unit]): UIO[Unit] = ZIO.scoped { for { - scope <- ZIO.scope + scope <- ZIO.scope ddSpan <- ZIO.succeed( AgentTracer .get() @@ -137,7 +137,7 @@ object ZioTestFixtures { private def run[A](zio: ZIO[Any, Nothing, A]): Unit = { val executor = Executors.newSingleThreadExecutor() val zioExecutor = Executor.fromJavaExecutor(executor) - val layer = + val layer = Runtime.setExecutor(zioExecutor) >>> Runtime.setBlockingExecutor(zioExecutor) try { diff --git a/dd-smoke-tests/play-2.4/app/filters/AbstractFilter.scala b/dd-smoke-tests/play-2.4/app/filters/AbstractFilter.scala index fe22c47ae90..3f52aedd56b 100644 --- a/dd-smoke-tests/play-2.4/app/filters/AbstractFilter.scala +++ b/dd-smoke-tests/play-2.4/app/filters/AbstractFilter.scala @@ -18,7 +18,7 @@ abstract class AbstractFilter(val operationName: String, val wrap: Boolean) exte )(requestHeader: RequestHeader): Future[Result] = { val tracer = GlobalTracer.get val startedSpan = if (wrap) tracer.buildSpan(operationName).start else null - val outerScope = + val outerScope = if (wrap) tracer.scopeManager.activate(startedSpan) else null try { nextFilter(requestHeader).map { result => diff --git a/dd-trace-core/src/test/java/datadog/trace/core/baggage/BaggagePropagatorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/baggage/BaggagePropagatorTest.java index 56f26321935..c88aa44ce1e 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/baggage/BaggagePropagatorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/baggage/BaggagePropagatorTest.java @@ -64,7 +64,7 @@ void setup() { "space is encoded | [serverNode: 'DF 28'] | 'serverNode=DF%2028' ", "non ASCII value | [userId: Amélie] | 'userId=Am%C3%A9lie' ", "parenthesis in key | ['user!d(me)': false] | 'user!d%28me%29=false' ", - "non ASCII heart symbol | [abcdefg: 'hijklmnopq♥'] | 'abcdefg=hijklmnopq%E2%99%A5' " + "non ASCII heart symbol | [abcdefg: 'hijklmnopq♥'] | 'abcdefg=hijklmnopq%E2%99%A5' " }) void testBaggagePropagatorContextInjection(Map baggageMap, String baggageHeader) { this.context = Baggage.create(baggageMap).storeInto(this.context); @@ -93,7 +93,7 @@ void testBaggageInjectItemLimit(Map baggage, String baggageHeade "scenario | baggage | baggageHeader ", "limit not reached | [key1: val1, key2: val2] | 'key1=val1,key2=val2'", "third entry exceeds bytes | [key1: val1, key2: val2, key3: val3] | 'key1=val1,key2=val2'", - "single entry exceeds bytes once encoded | [abcdefg: 'hijklmnopq♥'] | '' " + "single entry exceeds bytes once encoded | [abcdefg: 'hijklmnopq♥'] | '' " }) void testBaggageInjectBytesLimit(Map baggage, String baggageHeader) { // Creating propagator with test bytes limit diff --git a/dd-trace-core/src/test/java/datadog/trace/core/tagprocessor/SpanPointersProcessorTest.java b/dd-trace-core/src/test/java/datadog/trace/core/tagprocessor/SpanPointersProcessorTest.java index 0697f27d4f2..05092261200 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/tagprocessor/SpanPointersProcessorTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/tagprocessor/SpanPointersProcessorTest.java @@ -24,7 +24,7 @@ class SpanPointersProcessorTest extends DDJavaSpecification { @TableTest({ "scenario | objectKey | eTag | expectedHash ", "basic values | some-key.data | ab12ef34 | e721375466d4116ab551213fdea08413", - "non-ascii key | some-key.你好 | ab12ef34 | d1333a04b9928ab462b5c6cadfa401f4 ", + "non-ascii key | some-key.你好 | ab12ef34 | d1333a04b9928ab462b5c6cadfa401f4", "multipart etag | some-key.data | ab12ef34-5 | 2b90dffc37ebc7bc610152c3dc72af9f" }) void spanPointersProcessorAddsCorrectLink(String objectKey, String eTag, String expectedHash) { diff --git a/gradle/enforcement/spotless-scalafmt.conf b/gradle/enforcement/spotless-scalafmt.conf index d1e1ae77b97..9b27b387082 100644 --- a/gradle/enforcement/spotless-scalafmt.conf +++ b/gradle/enforcement/spotless-scalafmt.conf @@ -1,4 +1,5 @@ -version = 3.8.6 +# Keep aligned with the scalafmt version in ../libs.versions.toml. +version = 3.11.5 runner.dialect = scala213 align.preset = more maxColumn = 100 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5c912fdc551..ffc41acc6d4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,6 +9,12 @@ jsr305 = "3.0.2" shadow = "9.4.2" spotbugs_annotations = "4.10.2" +# Source code formatters +google-java-format = "1.36.1" +ktlint = "1.8.0" +scalafmt = "3.11.5" +tabletest-formatter = "1.1.2" + # DataDog libs and forks ddprof = "1.48.1" dogstatsd = "4.4.5" diff --git a/gradle/spotless.gradle b/gradle/spotless.gradle index 93a817e6452..3d6ab12be40 100644 --- a/gradle/spotless.gradle +++ b/gradle/spotless.gradle @@ -22,8 +22,8 @@ spotless { target 'src/**/*.java' // ignore embedded test projects and everything in build dir, e.g. generated sources targetExclude('src/test/resources/**', buildDirectoryFiles) - tableTestFormatter('1.1.1') - googleJavaFormat('1.35.0') + tableTestFormatter(libs.versions.tabletest.formatter.get()) + googleJavaFormat(libs.versions.google.java.format.get()) } } @@ -45,7 +45,7 @@ spotless { toggleOffOn() // same as kotlin, but for .gradle.kts files (defaults to '*.gradle.kts') target '*.gradle.kts' - ktlint('1.8.0').editorConfigOverride([ + ktlint(libs.versions.ktlint.get()).editorConfigOverride([ // Disable trailing comma rules to minimize diff. 'ktlint_standard_trailing-comma-on-call-site': 'disabled', 'ktlint_standard_trailing-comma-on-declaration-site': 'disabled' @@ -69,8 +69,7 @@ spotless { scala { toggleOffOn() targetExclude(buildDirectoryFiles) - // TODO: For some reason Scala format is working correctly with this version only. - scalafmt('3.8.6').configFile(configPath + '/enforcement/spotless-scalafmt.conf') + scalafmt(libs.versions.scalafmt.get()).configFile(configPath + '/enforcement/spotless-scalafmt.conf') } } @@ -93,7 +92,7 @@ spotless { kotlin { toggleOffOn() targetExclude(buildDirectoryFiles) - ktlint('1.8.0').editorConfigOverride([ + ktlint(libs.versions.ktlint.get()).editorConfigOverride([ // Disable trailing comma rules to minimize diff. 'ktlint_standard_trailing-comma-on-call-site': 'disabled', 'ktlint_standard_trailing-comma-on-declaration-site': 'disabled' diff --git a/internal-api/src/jmh/java/datadog/trace/util/CaseInsensitiveMapBenchmark.java b/internal-api/src/jmh/java/datadog/trace/util/CaseInsensitiveMapBenchmark.java index 48500669cd5..0598b3d3b64 100644 --- a/internal-api/src/jmh/java/datadog/trace/util/CaseInsensitiveMapBenchmark.java +++ b/internal-api/src/jmh/java/datadog/trace/util/CaseInsensitiveMapBenchmark.java @@ -12,8 +12,6 @@ import org.openjdk.jmh.infra.Blackhole; /** - * - * *
    * Benchmark to illustrate the trade-offs around case-insensitive Map look-ups - using either... *
  • (RECOMMENDED) TreeMap with Comparator of String::compareToIgnoreCase diff --git a/internal-api/src/jmh/java/datadog/trace/util/HashingBenchmark.java b/internal-api/src/jmh/java/datadog/trace/util/HashingBenchmark.java index a884a74d67c..9dc6faf5f6d 100644 --- a/internal-api/src/jmh/java/datadog/trace/util/HashingBenchmark.java +++ b/internal-api/src/jmh/java/datadog/trace/util/HashingBenchmark.java @@ -9,8 +9,6 @@ import org.openjdk.jmh.annotations.Warmup; /** - * - * *
      * Benchmark comparing HashingUtils.hash to Objects.hash *
    • (RECOMMENDED) HashingUtils.hash - avoids var-arg creation diff --git a/internal-api/src/jmh/java/datadog/trace/util/ThreadSafeMapBenchmark.java b/internal-api/src/jmh/java/datadog/trace/util/ThreadSafeMapBenchmark.java index 793627a37e6..2b786c692a9 100644 --- a/internal-api/src/jmh/java/datadog/trace/util/ThreadSafeMapBenchmark.java +++ b/internal-api/src/jmh/java/datadog/trace/util/ThreadSafeMapBenchmark.java @@ -13,8 +13,6 @@ import org.openjdk.jmh.annotations.Warmup; /** - * - * *
        * Benchmark comparing different approaches to filling and reading a Map in a multi-thread * context. diff --git a/test-published-dependencies/build.gradle.kts b/test-published-dependencies/build.gradle.kts index b9e30b36bff..b9f87c679d4 100644 --- a/test-published-dependencies/build.gradle.kts +++ b/test-published-dependencies/build.gradle.kts @@ -21,7 +21,7 @@ allprojects { spotless { kotlinGradle { target("*.gradle.kts") - ktlint("1.8.0").editorConfigOverride( + ktlint(libs.versions.ktlint.get()).editorConfigOverride( mapOf( // Disable trailing comma rules to minimize diff. "ktlint_standard_trailing-comma-on-call-site" to "disabled", @@ -31,7 +31,7 @@ allprojects { } java { target("src/**/*.java") - googleJavaFormat("1.35.0") + googleJavaFormat(libs.versions.google.java.format.get()) } } } diff --git a/test-published-dependencies/settings.gradle.kts b/test-published-dependencies/settings.gradle.kts index 0e44ffd63fd..993a60d0005 100644 --- a/test-published-dependencies/settings.gradle.kts +++ b/test-published-dependencies/settings.gradle.kts @@ -1,5 +1,13 @@ rootProject.name = "test-published-dependencies" +dependencyResolutionManagement { + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} + include(":all-deps-exist") include(":ot-pulls-in-api") include(":ot-is-shaded") From 96bbdb4c847423549cdb28900b79bdec08053b44 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Fri, 7 Aug 2026 15:33:27 -0400 Subject: [PATCH 2/2] Formatted akka module. --- .../akka-http-10.6/src/test/scala/AkkaHttpTestWebServer.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/scala/AkkaHttpTestWebServer.scala b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/scala/AkkaHttpTestWebServer.scala index 1e712d1d7aa..4c6d5b3f142 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/scala/AkkaHttpTestWebServer.scala +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/scala/AkkaHttpTestWebServer.scala @@ -354,8 +354,8 @@ object AkkaHttpTestWebServer { resp.withEntity(uri.queryString().orNull) case REDIRECT => resp.withHeaders(headers.Location(endpoint.getBody)) - case ERROR => resp.withEntity(endpoint.getBody) - case EXCEPTION => throw new Exception(endpoint.getBody) + case ERROR => resp.withEntity(endpoint.getBody) + case EXCEPTION => throw new Exception(endpoint.getBody) case USER_BLOCK => { Blocking.forUser("user-to-block").blockIfMatch() // should never be output: