diff --git a/build.gradle.kts b/build.gradle.kts
index 31b09e2f160..eb1776720c5 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -10,8 +10,8 @@ plugins {
id("datadog.ci-jobs")
id("com.diffplug.spotless") version "6.13.0"
- id("com.github.spotbugs") version "5.0.14"
- id("de.thetaphi.forbiddenapis") version "3.8"
+ id("com.github.spotbugs") version "6.4.5"
+ id("de.thetaphi.forbiddenapis") version "3.10"
id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
id("com.gradleup.shadow") version "8.3.6" apply false
id("me.champeau.jmh") version "0.7.3" apply false
diff --git a/buildSrc/call-site-instrumentation-plugin/build.gradle.kts b/buildSrc/call-site-instrumentation-plugin/build.gradle.kts
index 8b8793e721c..f4e5b7cec20 100644
--- a/buildSrc/call-site-instrumentation-plugin/build.gradle.kts
+++ b/buildSrc/call-site-instrumentation-plugin/build.gradle.kts
@@ -38,7 +38,7 @@ dependencies {
testImplementation(libs.groovy)
testImplementation(libs.bundles.spock)
testImplementation("javax.servlet", "javax.servlet-api", "3.0.1")
- testImplementation("com.github.spotbugs", "spotbugs-annotations", "4.2.0")
+ testImplementation(libs.spotbugs.annotations)
}
sourceSets {
diff --git a/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java b/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java
index 3864ccbded1..f4728952673 100644
--- a/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java
+++ b/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java
@@ -11,6 +11,7 @@
import datadog.remoteconfig.DefaultConfigurationPoller;
import datadog.trace.api.Config;
import datadog.trace.util.AgentTaskScheduler;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.security.Security;
import java.util.ArrayList;
import java.util.List;
@@ -31,6 +32,7 @@ public class SharedCommunicationObjects {
* HTTP client for making requests to Datadog agent. Depending on configuration, this client may
* use regular HTTP, UDS or named pipe.
*/
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public OkHttpClient agentHttpClient;
/**
@@ -39,10 +41,18 @@ public class SharedCommunicationObjects {
*/
private volatile OkHttpClient intakeHttpClient;
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public long httpClientTimeout;
+
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public boolean forceClearTextHttpForIntakeClient;
+
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public HttpUrl agentUrl;
+
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public Monitoring monitoring;
+
private volatile DDAgentFeaturesDiscovery featuresDiscovery;
private ConfigurationPoller configurationPoller;
diff --git a/communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java b/communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java
index e0e59969a97..d613d4ac564 100644
--- a/communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java
+++ b/communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java
@@ -16,6 +16,8 @@
public final class DDAgentStatsDClientManager implements StatsDClientManager {
private static final DDAgentStatsDClientManager INSTANCE = new DDAgentStatsDClientManager();
+ private DDAgentStatsDClientManager() {}
+
private static final boolean USE_LOGGING_CLIENT =
LOGGING_WRITER_TYPE.equals(Config.get().getWriterType());
diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java
index cf95f5add16..55103cf256d 100644
--- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java
+++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java
@@ -57,6 +57,7 @@
import datadog.trace.util.AgentTaskScheduler;
import datadog.trace.util.AgentThreadFactory.AgentThread;
import datadog.trace.util.throwable.FatalAgentMisconfigurationError;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -199,6 +200,7 @@ private static void safelySetContextClassLoader(ClassLoader classLoader) {
*
The Agent is considered to start successfully if Instrumentation can be activated. All other
* pieces are considered optional.
*/
+ @SuppressFBWarnings("AT_STALE_THREAD_WRITE_OF_PRIMITIVE")
public static void start(
final Object bootstrapInitTelemetry,
final Instrumentation inst,
@@ -456,6 +458,7 @@ private static void injectAgentArgsConfig(String agentArgs) {
}
}
+ @SuppressFBWarnings("AT_STALE_THREAD_WRITE_OF_PRIMITIVE")
private static void configureCiVisibility(URL agentJarURL) {
// Retro-compatibility for the old way to configure CI Visibility
if ("true".equals(ddGetProperty("dd.integration.junit.enabled"))
diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/PatchLogger.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/PatchLogger.java
index 8f28ca27b69..eea5b4adbb7 100644
--- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/PatchLogger.java
+++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/PatchLogger.java
@@ -29,7 +29,7 @@ public static PatchLogger getAnonymousLogger(final String resourceBundleName) {
return SAFE_LOGGER;
}
- protected PatchLogger(final String name, final String resourceBundleName) {
+ private PatchLogger(final String name, final String resourceBundleName) {
// super(name, resourceBundleName);
}
diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jms/SessionState.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jms/SessionState.java
index 7142ac3a505..be2179818ea 100644
--- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jms/SessionState.java
+++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jms/SessionState.java
@@ -2,7 +2,6 @@
import datadog.trace.api.Config;
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.ArrayDeque;
import java.util.Collections;
import java.util.Comparator;
@@ -65,7 +64,6 @@ public int compare(Map.Entry o1, Map.Entry 1) {
+ int execs = executions.incrementAndGet();
+ boolean success = successfulExecutionSeen.get() | (status != TestStatus.fail);
+ successfulExecutionSeen.set(success);
+ if (execs > 1) {
totalRetryCount.incrementAndGet();
}
boolean lastExecution = !retriesLeft();
- boolean retry = executions > 1; // first execution is not a retry
+ boolean retry = execs > 1; // first execution is not a retry
return new ExecutionOutcomeImpl(
status == TestStatus.fail && (!lastExecution || suppressFailures),
lastExecution,
- lastExecution && !successfulExecutionSeen,
+ lastExecution && !success,
false,
retry ? RetryReason.atr : null);
}
private boolean retriesLeft() {
- return !successfulExecutionSeen && executions < maxExecutions;
+ return !successfulExecutionSeen.get() && executions.get() < maxExecutions;
}
@Override
@@ -57,7 +58,7 @@ public boolean applicable() {
public boolean suppressFailures() {
// do not suppress failures for last execution (unless flag to suppress all failures is set);
// the +1 is because this method is called _before_ subsequent execution is registered
- return executions + 1 < maxExecutions || suppressFailures;
+ return executions.get() + 1 < maxExecutions || suppressFailures;
}
@Override
diff --git a/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestTestRunner.groovy b/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestTestRunner.groovy
index 7d0a121d385..a30f58d6d66 100644
--- a/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestTestRunner.groovy
+++ b/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestTestRunner.groovy
@@ -6,11 +6,13 @@ import datadog.trace.agent.test.utils.OkHttpUtils
import datadog.trace.api.gateway.IGSpanInfo
import datadog.trace.api.gateway.RequestContext
import datadog.trace.api.gateway.RequestContextSlot
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
import okhttp3.OkHttpClient
import java.util.concurrent.LinkedBlockingQueue
import java.util.concurrent.TimeUnit
+@SuppressFBWarnings("HSM_HIDING_METHOD")
class IastRequestTestRunner extends IastAgentTestRunner implements IastRequestContextPreparationTrait {
private static final LinkedBlockingQueue TAINTED_OBJECTS = new LinkedBlockingQueue<>()
diff --git a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/IastSystem.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/IastSystem.java
index 52bf8511bdd..e11712e2030 100644
--- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/IastSystem.java
+++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/IastSystem.java
@@ -55,6 +55,7 @@
import datadog.trace.api.iast.telemetry.Verbosity;
import datadog.trace.util.AgentTaskScheduler;
import datadog.trace.util.stacktrace.StackWalkerFactory;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Constructor;
import java.lang.reflect.UndeclaredThrowableException;
@@ -70,7 +71,11 @@
public class IastSystem {
private static final Logger LOGGER = LoggerFactory.getLogger(IastSystem.class);
+
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public static boolean DEBUG = false;
+
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public static Verbosity VERBOSITY = Verbosity.OFF;
public static void start(final SubscriptionService ss) {
diff --git a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/propagation/StringModuleImpl.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/propagation/StringModuleImpl.java
index b74efab5090..19fd62a9b82 100644
--- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/propagation/StringModuleImpl.java
+++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/propagation/StringModuleImpl.java
@@ -224,7 +224,6 @@ public void onStringConcatFactory(
}
@Override
- @SuppressFBWarnings("ES_COMPARING_PARAMETER_STRING_WITH_EQ")
public void onStringSubSequence(
@Nonnull CharSequence self, int beginIndex, int endIndex, @Nullable CharSequence result) {
if (self == result || !canBeTainted(result)) {
@@ -722,7 +721,6 @@ public void onStringReplace(
/** This method is used to make an {@code CallSite.Around} of the {@code String.replace} method */
@Override
- @SuppressFBWarnings("ES_COMPARING_PARAMETER_STRING_WITH_EQ")
public String onStringReplace(
@Nonnull String self, CharSequence oldCharSeq, CharSequence newCharSeq) {
final IastContext ctx = IastContext.Provider.get();
@@ -805,7 +803,6 @@ public String onStringReplace(
}
@Override
- @SuppressFBWarnings("ES_COMPARING_PARAMETER_STRING_WITH_EQ")
public void onStringValueOf(Object param, @Nonnull String result) {
if (param == null || !canBeTainted(result)) {
return;
diff --git a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/TaintedMap.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/TaintedMap.java
index 673b3113728..4a70d267635 100644
--- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/TaintedMap.java
+++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/TaintedMap.java
@@ -102,7 +102,7 @@ class TaintedMapImpl implements TaintedMap, Runnable {
/**
* Flag for the current alive tainted objects (red/black style marking for max age calculation).
*/
- protected boolean generation;
+ protected volatile boolean generation;
/** Whether to collect the {@link IastMetric#TAINTED_FLAT_MODE} metric or not */
protected boolean collectFlatBucketMetric;
diff --git a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java
index 2d8a4979938..62ca9ea29fe 100644
--- a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java
+++ b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java
@@ -50,7 +50,7 @@ public static boolean checkEnvironment(String temp, StringBuilder sb) {
boolean result = false;
result |= checkJFR(sb);
result |= checkDdprof(sb);
- if (!result) {;
+ if (!result) {
appendLine("Profiler is not supported on this JVM.", sb);
return false;
} else {
diff --git a/dd-java-agent/agent-profiling/profiling-utils/src/main/java/com/datadog/profiling/utils/Timestamper.java b/dd-java-agent/agent-profiling/profiling-utils/src/main/java/com/datadog/profiling/utils/Timestamper.java
index 24da6779d5d..8f7fafeb415 100644
--- a/dd-java-agent/agent-profiling/profiling-utils/src/main/java/com/datadog/profiling/utils/Timestamper.java
+++ b/dd-java-agent/agent-profiling/profiling-utils/src/main/java/com/datadog/profiling/utils/Timestamper.java
@@ -1,5 +1,6 @@
package com.datadog.profiling.utils;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
public interface Timestamper {
@@ -33,6 +34,7 @@ static boolean override(Timestamper timestamper) {
Registration.INSTANCE, Timestamper.DEFAULT, timestamper);
}
+ @SuppressFBWarnings("SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR")
final class Singleton {
//
static final Timestamper TIMESTAMPER = Registration.INSTANCE.pending;
diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/usm/UsmMessageImpl.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/usm/UsmMessageImpl.java
index 0833d933394..92a48581f44 100644
--- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/usm/UsmMessageImpl.java
+++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/usm/UsmMessageImpl.java
@@ -22,7 +22,7 @@ enum MessageType {
private static final Logger log = LoggerFactory.getLogger(BaseUsmMessage.class);
// TODO: sync with systemprobe code
- static final NativeLong USM_IOCTL_ID = new NativeLong(0xda7ad09L);;
+ static final NativeLong USM_IOCTL_ID = new NativeLong(0xda7ad09L);
abstract static class BaseUsmMessage implements UsmMessage {
diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/config/AppSecConfigServiceImpl.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/config/AppSecConfigServiceImpl.java
index fae17c9531d..87fa53f15bc 100644
--- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/config/AppSecConfigServiceImpl.java
+++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/config/AppSecConfigServiceImpl.java
@@ -100,8 +100,8 @@ public class AppSecConfigServiceImpl implements AppSecConfigService {
.build()
.adapter(Types.newParameterizedType(Map.class, String.class, Object.class));
- private boolean hasUserWafConfig;
- private boolean defaultConfigActivated;
+ private volatile boolean hasUserWafConfig;
+ private volatile boolean defaultConfigActivated;
private final AtomicBoolean subscribedToRulesAndData = new AtomicBoolean();
private final Set usedDDWafConfigKeys =
Collections.newSetFromMap(new ConcurrentHashMap<>());
diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java
index 9853c659959..793ab064856 100644
--- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java
+++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java
@@ -14,6 +14,7 @@
import datadog.trace.api.http.StoredBodySupplier;
import datadog.trace.api.internal.TraceSegment;
import datadog.trace.util.stacktrace.StackTraceEvent;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.Closeable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -41,6 +42,7 @@
// TODO: different methods to be called by different parts perhaps splitting it would make sense
// or at least create separate interfaces
+@SuppressFBWarnings("AT_STALE_THREAD_WRITE_OF_PRIMITIVE")
public class AppSecRequestContext implements DataBundle, Closeable {
private static final Logger log = LoggerFactory.getLogger(AppSecRequestContext.class);
diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle
index 8831b322867..74195962fb3 100644
--- a/dd-java-agent/build.gradle
+++ b/dd-java-agent/build.gradle
@@ -1,5 +1,4 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
-
import java.util.concurrent.atomic.AtomicBoolean
plugins {
@@ -29,7 +28,6 @@ tasks.named("processResources") {
sourceSets {
"main_java6" {
java.srcDirs "${project.projectDir}/src/main/java6"
-
}
main.resources.srcDir(includedAgentDir)
}
@@ -43,7 +41,7 @@ tasks.named("compileJava") {
}
dependencies {
- main_java6CompileOnly 'de.thetaphi:forbiddenapis:3.8'
+ main_java6CompileOnly libs.forbiddenapis
testImplementation sourceSets.main_java6.output
}
diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy
index 82bb9c1512f..29b652b5791 100644
--- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy
+++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy
@@ -252,7 +252,7 @@ abstract class InstrumentationSpecification extends DDSpecification implements A
}
}
- boolean originalAppSecRuntimeValue
+ volatile boolean originalAppSecRuntimeValue
@Shared
ConcurrentHashMap> spanFinishLocations = new ConcurrentHashMap<>()
diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle
index 5afa238bf1e..10639cdb033 100644
--- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle
+++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle
@@ -119,7 +119,7 @@ dependencies {
baseTestImplementation group: 'com.typesafe.akka', name: 'akka-http-spray-json_2.11', version: '10.0.10'
iastTestImplementation project(':dd-java-agent:agent-iast:iast-test-fixtures')
- iastTestCompileOnly group: 'de.thetaphi', name: 'forbiddenapis', version: '3.4'
+ iastTestCompileOnly libs.forbiddenapis
iastTestRuntimeOnly project(':dd-java-agent:instrumentation:jackson-core')
iastTestRuntimeOnly project(':dd-java-agent:instrumentation:jackson-core:jackson-core-2.8')
iastTestRuntimeOnly project(':dd-java-agent:instrumentation:iast-instrumenter')
diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/HttpRequestInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/HttpRequestInstrumentation.java
index b9ae249e0d1..b0b027bcfd7 100644
--- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/HttpRequestInstrumentation.java
+++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/HttpRequestInstrumentation.java
@@ -24,7 +24,6 @@
import datadog.trace.api.iast.Source;
import datadog.trace.api.iast.SourceTypes;
import datadog.trace.api.iast.propagation.PropagationModule;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import net.bytebuddy.asm.Advice;
import scala.collection.Iterator;
import scala.collection.immutable.Seq;
@@ -61,7 +60,6 @@ public void methodAdvice(MethodTransformer transformer) {
HttpRequestInstrumentation.class.getName() + "$EntityAdvice");
}
- @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF")
@RequiresRequestContext(RequestContextSlot.IAST)
static class RequestHeadersAdvice {
@Advice.OnMethodExit(suppress = Throwable.class)
diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/RequestContextInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/RequestContextInstrumentation.java
index 34b9e7a1490..f1cf128078e 100644
--- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/RequestContextInstrumentation.java
+++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/RequestContextInstrumentation.java
@@ -19,7 +19,6 @@
import datadog.trace.api.iast.InstrumentationBridge;
import datadog.trace.api.iast.Propagation;
import datadog.trace.api.iast.propagation.PropagationModule;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import net.bytebuddy.asm.Advice;
/** Propagates taint when fetching the {@link HttpRequest} from the {@link RequestContext}. */
@@ -46,7 +45,6 @@ public void methodAdvice(MethodTransformer transformer) {
RequestContextInstrumentation.class.getName() + "$GetRequestAdvice");
}
- @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF")
@RequiresRequestContext(RequestContextSlot.IAST)
static class GetRequestAdvice {
@Advice.OnMethodExit(suppress = Throwable.class)
diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/helpers/TaintRequestFunction.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/helpers/TaintRequestFunction.java
index c881037cf1c..cd80b65b56f 100644
--- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/helpers/TaintRequestFunction.java
+++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/helpers/TaintRequestFunction.java
@@ -6,7 +6,6 @@
import datadog.trace.api.iast.SourceTypes;
import datadog.trace.api.iast.propagation.PropagationModule;
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import scala.Tuple1;
import scala.compat.java8.JFunction1;
@@ -14,7 +13,6 @@ public class TaintRequestFunction implements JFunction1, Tup
public static final TaintRequestFunction INSTANCE = new TaintRequestFunction();
@Override
- @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF")
public Tuple1 apply(Tuple1 v1) {
HttpRequest httpRequest = v1._1();
diff --git a/dd-java-agent/instrumentation/exception-profiling/build.gradle b/dd-java-agent/instrumentation/exception-profiling/build.gradle
index a19ca1ab9a3..aea466f6470 100644
--- a/dd-java-agent/instrumentation/exception-profiling/build.gradle
+++ b/dd-java-agent/instrumentation/exception-profiling/build.gradle
@@ -16,7 +16,7 @@ testJvmConstraints {
}
dependencies {
- testImplementation 'de.thetaphi:forbiddenapis:3.8'
+ testImplementation libs.forbiddenapis
testImplementation libs.bundles.junit5
testImplementation libs.bundles.jmc
testImplementation libs.commons.math
diff --git a/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/GradleLauncherInstrumentation.java b/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/GradleLauncherInstrumentation.java
index 94bbc34fcc4..5c16964e933 100644
--- a/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/GradleLauncherInstrumentation.java
+++ b/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/GradleLauncherInstrumentation.java
@@ -6,7 +6,6 @@
import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.agent.tooling.InstrumenterModule;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Map;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
@@ -50,9 +49,6 @@ public String[] helperClassNames() {
};
}
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "jvmOptions is the return value of the original method")
public static class PropertiesAugmentationAdvice {
@Advice.OnMethodExit(suppress = Throwable.class)
public static void addJavaagentToGradleDaemonProperties(
diff --git a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/ExtractAdapter.java b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/ExtractAdapter.java
index f2a22b28923..af76f7b8fa4 100644
--- a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/ExtractAdapter.java
+++ b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/ExtractAdapter.java
@@ -12,6 +12,8 @@ public class ExtractAdapter implements AgentPropagation.Co
@SuppressWarnings("rawtypes")
private static final ExtractAdapter GETTER = new ExtractAdapter();
+ private ExtractAdapter() {}
+
@SuppressWarnings("unchecked")
public static AgentPropagation.ContextVisitor requestGetter() {
return (AgentPropagation.ContextVisitor) GETTER;
diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/src/main/java/datadog/trace/instrumentation/junit4/execution/MUnitExecutionInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/src/main/java/datadog/trace/instrumentation/junit4/execution/MUnitExecutionInstrumentation.java
index a5dae830aa8..94fe65f9f4a 100644
--- a/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/src/main/java/datadog/trace/instrumentation/junit4/execution/MUnitExecutionInstrumentation.java
+++ b/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/src/main/java/datadog/trace/instrumentation/junit4/execution/MUnitExecutionInstrumentation.java
@@ -17,7 +17,6 @@
import datadog.trace.instrumentation.junit4.MUnitUtils;
import datadog.trace.instrumentation.junit4.TestEventsHandlerHolder;
import datadog.trace.util.Strings;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
@@ -122,9 +121,6 @@ public static Future> apply(
}
@SuppressWarnings("bytebuddy-exception-suppression")
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "result is the return value of the original method")
@Advice.OnMethodExit
public static void returnResult(
@Advice.Enter Future> overriddenResult,
diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberSkipInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberSkipInstrumentation.java
index cc5ff7d2e40..0a30861948f 100644
--- a/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberSkipInstrumentation.java
+++ b/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberSkipInstrumentation.java
@@ -14,7 +14,6 @@
import datadog.trace.api.civisibility.events.TestEventsHandler;
import datadog.trace.api.civisibility.telemetry.tag.SkipReason;
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Collection;
import java.util.Set;
import net.bytebuddy.asm.Advice;
@@ -85,10 +84,6 @@ public void methodAdvice(MethodTransformer transformer) {
* available in CL where this instrumentation is injected
*/
public static class JUnit5SkipAdvice {
-
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "skipResult is the return value of the instrumented method")
@Advice.OnMethodExit
public static void shouldBeSkipped(
@Advice.This TestDescriptor testDescriptor,
diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/src/main/java/datadog/trace/instrumentation/junit5/order/JUnit5TestOrderInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/src/main/java/datadog/trace/instrumentation/junit5/order/JUnit5TestOrderInstrumentation.java
index 2e5686f5fc7..0841857fa4a 100644
--- a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/src/main/java/datadog/trace/instrumentation/junit5/order/JUnit5TestOrderInstrumentation.java
+++ b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/src/main/java/datadog/trace/instrumentation/junit5/order/JUnit5TestOrderInstrumentation.java
@@ -13,7 +13,6 @@
import datadog.trace.instrumentation.junit5.JUnitPlatformUtils;
import datadog.trace.instrumentation.junit5.TestEventsHandlerHolder;
import datadog.trace.util.Strings;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;
import java.util.Set;
import net.bytebuddy.asm.Advice;
@@ -76,9 +75,6 @@ public static void onGetClassOrdererEnter() {
CallDepthThreadLocalMap.incrementCallDepth(JupiterConfiguration.class);
}
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "classOrderer is the return value of the instrumented method")
@Advice.OnMethodExit
public static void onGetClassOrdererExit(
@Advice.Return(readOnly = false) Optional classOrderer) {
@@ -105,9 +101,6 @@ public static void onGetMethodOrdererEnter() {
CallDepthThreadLocalMap.incrementCallDepth(JupiterConfiguration.class);
}
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "methodOrderer is the return value of the instrumented method")
@Advice.OnMethodExit
public static void onGetMethodOrdererExit(
@Advice.Return(readOnly = false) Optional methodOrderer) {
diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockSkipInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockSkipInstrumentation.java
index 465b85ff991..397cbb031a5 100644
--- a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockSkipInstrumentation.java
+++ b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockSkipInstrumentation.java
@@ -14,7 +14,6 @@
import datadog.trace.api.civisibility.telemetry.tag.SkipReason;
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation;
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Set;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
@@ -85,9 +84,6 @@ public static void beforeSkipCheck() {
}
@SuppressWarnings("bytebuddy-exception-suppression")
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "skipResult is the return value of the instrumented method")
@Advice.OnMethodExit
public static void shouldBeSkipped(
@Advice.This SpockNode> spockNode,
diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5SpockParameterizedExecutionInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5SpockParameterizedExecutionInstrumentation.java
index a7642ad3259..6e5d505fb95 100644
--- a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5SpockParameterizedExecutionInstrumentation.java
+++ b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5SpockParameterizedExecutionInstrumentation.java
@@ -8,7 +8,6 @@
import datadog.trace.api.Config;
import datadog.trace.instrumentation.junit5.JUnitPlatformUtils;
import datadog.trace.util.Strings;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
@@ -62,9 +61,6 @@ public void methodAdvice(MethodTransformer transformer) {
public static class SpockParameterizedExecutionAdvice {
@SuppressWarnings("bytebuddy-exception-suppression")
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "executionListener is a field in the instrumented class")
@Advice.OnMethodExit
public static void afterConstructor(
@Advice.FieldValue(value = "executionListener", readOnly = false)
diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5Instrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5Instrumentation.java
index ad5ab0f6f1a..bacbafe3464 100644
--- a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5Instrumentation.java
+++ b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5Instrumentation.java
@@ -11,7 +11,6 @@
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation;
import datadog.trace.bootstrap.ContextStore;
import datadog.trace.bootstrap.InstrumentationContext;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Collections;
import java.util.Map;
import net.bytebuddy.asm.Advice;
@@ -76,9 +75,6 @@ public void methodAdvice(MethodTransformer transformer) {
}
public static class ContextStoreAdvice {
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "executionRequest is the argument of the original method")
@Advice.OnMethodEnter
public static void setContextStores(@Advice.This TestEngine testEngine) {
ContextStore contextStore =
@@ -89,9 +85,6 @@ public static void setContextStores(@Advice.This TestEngine testEngine) {
}
public static class JUnit5Advice {
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "executionRequest is the argument of the original method")
@Advice.OnMethodEnter
public static void addTracingListener(
@Advice.This TestEngine testEngine,
diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SkipInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SkipInstrumentation.java
index 35218d456a9..3ab0b783ddb 100644
--- a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SkipInstrumentation.java
+++ b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SkipInstrumentation.java
@@ -15,7 +15,6 @@
import datadog.trace.api.civisibility.events.TestEventsHandler;
import datadog.trace.api.civisibility.telemetry.tag.SkipReason;
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Collection;
import java.util.Set;
import net.bytebuddy.asm.Advice;
@@ -76,10 +75,6 @@ public void methodAdvice(MethodTransformer transformer) {
* available in CL where this instrumentation is injected
*/
public static class JUnit5SkipAdvice {
-
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "skipResult is the return value of the instrumented method")
@Advice.OnMethodExit
public static void shouldBeSkipped(
@Advice.This TestDescriptor testDescriptor,
diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5ExecutionStoreInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5ExecutionStoreInstrumentation.java
index 019b4a6b4dd..18ea443fb60 100644
--- a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5ExecutionStoreInstrumentation.java
+++ b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5ExecutionStoreInstrumentation.java
@@ -14,7 +14,6 @@
import datadog.trace.instrumentation.junit5.JUnitPlatformUtils;
import datadog.trace.instrumentation.junit5.TestEventsHandlerHolder;
import datadog.trace.util.Strings;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Collections;
import java.util.Map;
import net.bytebuddy.asm.Advice;
@@ -73,9 +72,6 @@ public void methodAdvice(MethodTransformer transformer) {
}
public static class ContextStoreAdvice {
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "executionRequest is the argument of the original method")
@Advice.OnMethodEnter
public static void setContextStores() {
ContextStore contextStore =
diff --git a/dd-java-agent/instrumentation/karate/src/main/java/datadog/trace/instrumentation/karate/TestEventsHandlerHolder.java b/dd-java-agent/instrumentation/karate/src/main/java/datadog/trace/instrumentation/karate/TestEventsHandlerHolder.java
index 15895b8d721..6d9c65cd400 100644
--- a/dd-java-agent/instrumentation/karate/src/main/java/datadog/trace/instrumentation/karate/TestEventsHandlerHolder.java
+++ b/dd-java-agent/instrumentation/karate/src/main/java/datadog/trace/instrumentation/karate/TestEventsHandlerHolder.java
@@ -4,9 +4,11 @@
import datadog.trace.api.civisibility.events.TestDescriptor;
import datadog.trace.api.civisibility.events.TestEventsHandler;
import datadog.trace.api.civisibility.events.TestSuiteDescriptor;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
public abstract class TestEventsHandlerHolder {
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public static volatile TestEventsHandler TEST_EVENTS_HANDLER;
static {
diff --git a/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle b/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle
index 453ab37dfe6..fa4ebbd3eb1 100644
--- a/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle
+++ b/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle
@@ -60,7 +60,6 @@ dependencies {
testFixturesApi project(':dd-trace-api')
testFixturesApi project(':dd-java-agent:instrumentation:trace-annotation')
testFixturesApi project(':dd-java-agent:instrumentation-testing')
- testFixturesApi 'com.github.spotbugs:spotbugs-annotations:4.2.0'
testImplementation libs.kotlin
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0"
diff --git a/dd-java-agent/instrumentation/kotlin-coroutines/src/latestDepTest/kotlin/KotlinCoroutineTests.kt b/dd-java-agent/instrumentation/kotlin-coroutines/src/latestDepTest/kotlin/KotlinCoroutineTests.kt
index 577dfd14727..beaeddd5c31 100644
--- a/dd-java-agent/instrumentation/kotlin-coroutines/src/latestDepTest/kotlin/KotlinCoroutineTests.kt
+++ b/dd-java-agent/instrumentation/kotlin-coroutines/src/latestDepTest/kotlin/KotlinCoroutineTests.kt
@@ -1,6 +1,5 @@
import datadog.trace.api.Trace
import datadog.trace.instrumentation.kotlin.coroutines.CoreKotlinCoroutineTests
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.flow
@@ -9,7 +8,6 @@ import kotlinx.coroutines.flow.single
import kotlinx.coroutines.launch
import kotlinx.coroutines.withTimeout
-@SuppressFBWarnings("NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE")
class KotlinCoroutineTests(dispatcher: CoroutineDispatcher) : CoreKotlinCoroutineTests(dispatcher) {
@Trace
diff --git a/dd-java-agent/instrumentation/kotlin-coroutines/src/test/kotlin/KotlinCoroutineTests.kt b/dd-java-agent/instrumentation/kotlin-coroutines/src/test/kotlin/KotlinCoroutineTests.kt
index 3fb4e460ca8..c809fdb2d7e 100644
--- a/dd-java-agent/instrumentation/kotlin-coroutines/src/test/kotlin/KotlinCoroutineTests.kt
+++ b/dd-java-agent/instrumentation/kotlin-coroutines/src/test/kotlin/KotlinCoroutineTests.kt
@@ -1,6 +1,5 @@
import datadog.trace.api.Trace
import datadog.trace.instrumentation.kotlin.coroutines.CoreKotlinCoroutineTests
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.actor
@@ -9,7 +8,6 @@ import kotlinx.coroutines.channels.produce
import kotlinx.coroutines.channels.toChannel
@OptIn(ExperimentalCoroutinesApi::class)
-@SuppressFBWarnings("NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE")
class KotlinCoroutineTests(dispatcher: CoroutineDispatcher) : CoreKotlinCoroutineTests(dispatcher) {
@Trace
diff --git a/dd-java-agent/instrumentation/kotlin-coroutines/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt b/dd-java-agent/instrumentation/kotlin-coroutines/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt
index 45252e74867..1d36be03c5b 100644
--- a/dd-java-agent/instrumentation/kotlin-coroutines/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt
+++ b/dd-java-agent/instrumentation/kotlin-coroutines/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt
@@ -5,7 +5,6 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan
import datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan
import datadog.trace.bootstrap.instrumentation.api.AgentTracer.get
import datadog.trace.bootstrap.instrumentation.api.AgentTracer.setAsyncPropagationEnabled
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineName
@@ -28,7 +27,6 @@ import java.util.concurrent.CancellationException
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicInteger
-@SuppressFBWarnings("NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE")
abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatcher) {
@Trace
diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/build.gradle b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/build.gradle
index f282eec55d0..514a18fb769 100644
--- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/build.gradle
+++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/build.gradle
@@ -63,7 +63,7 @@ dependencies {
iastTestImplementation group: 'com.github.pjfanning', name: 'pekko-http-jackson_2.12', version: '2.1.0'
iastTestImplementation project(':dd-java-agent:agent-iast:iast-test-fixtures')
- iastTestCompileOnly group: 'de.thetaphi', name: 'forbiddenapis', version: '3.4'
+ iastTestCompileOnly libs.forbiddenapis
iastTestRuntimeOnly project(':dd-java-agent:instrumentation:jackson-core')
iastTestRuntimeOnly project(':dd-java-agent:instrumentation:jackson-core:jackson-core-2.12')
iastTestRuntimeOnly project(':dd-java-agent:instrumentation:iast-instrumenter')
diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpServerHeaders.java b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpServerHeaders.java
index ef77b52bd53..44d9c27580f 100644
--- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpServerHeaders.java
+++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/PekkoHttpServerHeaders.java
@@ -12,6 +12,8 @@ public class PekkoHttpServerHeaders
@SuppressWarnings("rawtypes")
private static final PekkoHttpServerHeaders GETTER = new PekkoHttpServerHeaders();
+ private PekkoHttpServerHeaders() {}
+
@SuppressWarnings("unchecked")
public static AgentPropagation.ContextVisitor requestGetter() {
return (AgentPropagation.ContextVisitor) GETTER;
diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/HttpRequestInstrumentation.java b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/HttpRequestInstrumentation.java
index fb10785e46b..6a6a1eb88cb 100644
--- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/HttpRequestInstrumentation.java
+++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/HttpRequestInstrumentation.java
@@ -22,7 +22,6 @@
import datadog.trace.api.iast.Source;
import datadog.trace.api.iast.SourceTypes;
import datadog.trace.api.iast.propagation.PropagationModule;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import net.bytebuddy.asm.Advice;
import org.apache.pekko.http.scaladsl.model.HttpHeader;
import org.apache.pekko.http.scaladsl.model.HttpRequest;
@@ -61,7 +60,6 @@ public void methodAdvice(MethodTransformer transformer) {
HttpRequestInstrumentation.class.getName() + "$EntityAdvice");
}
- @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF")
@RequiresRequestContext(RequestContextSlot.IAST)
static class RequestHeadersAdvice {
@Advice.OnMethodExit(suppress = Throwable.class)
diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/RequestContextInstrumentation.java b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/RequestContextInstrumentation.java
index 0f302d0f6b9..3bf9af6d546 100644
--- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/RequestContextInstrumentation.java
+++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/RequestContextInstrumentation.java
@@ -17,7 +17,6 @@
import datadog.trace.api.iast.InstrumentationBridge;
import datadog.trace.api.iast.Propagation;
import datadog.trace.api.iast.propagation.PropagationModule;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import net.bytebuddy.asm.Advice;
import org.apache.pekko.http.scaladsl.model.HttpRequest;
import org.apache.pekko.http.scaladsl.server.RequestContext;
@@ -46,7 +45,6 @@ public void methodAdvice(MethodTransformer transformer) {
RequestContextInstrumentation.class.getName() + "$GetRequestAdvice");
}
- @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF")
@RequiresRequestContext(RequestContextSlot.IAST)
static class GetRequestAdvice {
@Advice.OnMethodExit(suppress = Throwable.class)
diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/helpers/TaintRequestFunction.java b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/helpers/TaintRequestFunction.java
index 2c11c014ccd..15e9486efa3 100644
--- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/helpers/TaintRequestFunction.java
+++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/helpers/TaintRequestFunction.java
@@ -5,7 +5,6 @@
import datadog.trace.api.iast.SourceTypes;
import datadog.trace.api.iast.propagation.PropagationModule;
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.apache.pekko.http.scaladsl.model.HttpRequest;
import scala.Tuple1;
import scala.compat.java8.JFunction1;
@@ -14,7 +13,6 @@ public class TaintRequestFunction implements JFunction1, Tup
public static final TaintRequestFunction INSTANCE = new TaintRequestFunction();
@Override
- @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF")
public Tuple1 apply(Tuple1 v1) {
HttpRequest httpRequest = v1._1();
diff --git a/dd-java-agent/instrumentation/ratpack-1.5/build.gradle b/dd-java-agent/instrumentation/ratpack-1.5/build.gradle
index 38ed3cbd41f..e6572cbe135 100644
--- a/dd-java-agent/instrumentation/ratpack-1.5/build.gradle
+++ b/dd-java-agent/instrumentation/ratpack-1.5/build.gradle
@@ -15,7 +15,6 @@ addTestSuiteForDir('latestDepTest', 'test')
dependencies {
compileOnly group: 'io.ratpack', name: 'ratpack-core', version: '1.5.0'
- compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.2.0'
testImplementation project(':dd-java-agent:instrumentation:netty:netty-4.1')
testImplementation group: 'io.ratpack', name: 'ratpack-groovy-test', version: '1.5.0'
diff --git a/dd-java-agent/instrumentation/scalatest/src/main/java/datadog/trace/instrumentation/scalatest/ScalatestSkipInstrumentation.java b/dd-java-agent/instrumentation/scalatest/src/main/java/datadog/trace/instrumentation/scalatest/ScalatestSkipInstrumentation.java
index dfd6763c5df..e74e1e2f0ef 100644
--- a/dd-java-agent/instrumentation/scalatest/src/main/java/datadog/trace/instrumentation/scalatest/ScalatestSkipInstrumentation.java
+++ b/dd-java-agent/instrumentation/scalatest/src/main/java/datadog/trace/instrumentation/scalatest/ScalatestSkipInstrumentation.java
@@ -10,7 +10,6 @@
import datadog.trace.agent.tooling.InstrumenterModule;
import datadog.trace.api.civisibility.config.TestIdentifier;
import datadog.trace.bootstrap.InstrumentationContext;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
@@ -100,9 +99,6 @@ public static void apply(
}
public static class SingleTestFilterAdvice {
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "filterResult is the return value of the instrumented method")
@Advice.OnMethodExit
public static void apply(
@Advice.This Filter filter,
@@ -129,9 +125,6 @@ public static void apply(
}
public static class MultipleTestsFilterAdvice {
- @SuppressFBWarnings(
- value = "UC_USELESS_OBJECT",
- justification = "filterResult is the return value of the instrumented method")
@Advice.OnMethodExit
public static void apply(
@Advice.This Filter filter,
diff --git a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java
index 01e37f38c45..4401861c610 100644
--- a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java
+++ b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java
@@ -39,7 +39,21 @@
import org.apache.spark.ExceptionFailure;
import org.apache.spark.SparkConf;
import org.apache.spark.TaskFailedReason;
-import org.apache.spark.scheduler.*;
+import org.apache.spark.scheduler.AccumulableInfo;
+import org.apache.spark.scheduler.JobFailed;
+import org.apache.spark.scheduler.SparkListener;
+import org.apache.spark.scheduler.SparkListenerApplicationEnd;
+import org.apache.spark.scheduler.SparkListenerApplicationStart;
+import org.apache.spark.scheduler.SparkListenerEvent;
+import org.apache.spark.scheduler.SparkListenerExecutorAdded;
+import org.apache.spark.scheduler.SparkListenerExecutorRemoved;
+import org.apache.spark.scheduler.SparkListenerInterface;
+import org.apache.spark.scheduler.SparkListenerJobEnd;
+import org.apache.spark.scheduler.SparkListenerJobStart;
+import org.apache.spark.scheduler.SparkListenerStageCompleted;
+import org.apache.spark.scheduler.SparkListenerStageSubmitted;
+import org.apache.spark.scheduler.SparkListenerTaskEnd;
+import org.apache.spark.scheduler.StageInfo;
import org.apache.spark.sql.execution.SQLExecution;
import org.apache.spark.sql.execution.SparkPlanInfo;
import org.apache.spark.sql.execution.metric.SQLMetricInfo;
@@ -77,7 +91,7 @@ public abstract class AbstractDatadogSparkListener extends SparkListener {
private static final String AGENT_OL_ENDPOINT = "openlineage/api/v1/lineage";
private static final int OL_CIRCUIT_BREAKER_TIMEOUT_IN_SECONDS = 60;
- public volatile SparkListenerInterface openLineageSparkListener = null;
+ volatile SparkListenerInterface openLineageSparkListener = null;
public volatile SparkConf openLineageSparkConf = null;
private final SparkConf sparkConf;
diff --git a/dd-java-agent/instrumentation/testng/src/main/java/datadog/trace/instrumentation/testng/TestEventsHandlerHolder.java b/dd-java-agent/instrumentation/testng/src/main/java/datadog/trace/instrumentation/testng/TestEventsHandlerHolder.java
index 6edc08fed73..3988c18b8f1 100644
--- a/dd-java-agent/instrumentation/testng/src/main/java/datadog/trace/instrumentation/testng/TestEventsHandlerHolder.java
+++ b/dd-java-agent/instrumentation/testng/src/main/java/datadog/trace/instrumentation/testng/TestEventsHandlerHolder.java
@@ -5,10 +5,12 @@
import datadog.trace.api.civisibility.events.TestEventsHandler;
import datadog.trace.api.civisibility.events.TestSuiteDescriptor;
import datadog.trace.bootstrap.ContextStore;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.testng.ITestResult;
public abstract class TestEventsHandlerHolder {
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public static volatile TestEventsHandler TEST_EVENTS_HANDLER;
private static ContextStore TEST_STORE;
diff --git a/dd-java-agent/instrumentation/testng/src/main/java/datadog/trace/instrumentation/testng/execution/RetryAnalyzer.java b/dd-java-agent/instrumentation/testng/src/main/java/datadog/trace/instrumentation/testng/execution/RetryAnalyzer.java
index 64ccef3700e..6e7214e12e1 100644
--- a/dd-java-agent/instrumentation/testng/src/main/java/datadog/trace/instrumentation/testng/execution/RetryAnalyzer.java
+++ b/dd-java-agent/instrumentation/testng/src/main/java/datadog/trace/instrumentation/testng/execution/RetryAnalyzer.java
@@ -13,7 +13,7 @@
public class RetryAnalyzer implements IRetryAnalyzer {
private volatile TestExecutionPolicy executionPolicy;
- private boolean suppressFailures;
+ private volatile boolean suppressFailures;
public void createExecutionPolicy(ITestResult result) {
if (executionPolicy == null) {
diff --git a/dd-java-agent/instrumentation/testng/testng-7/src/main/java/datadog/trace/instrumentation/testng7/TestNGExecutionInstrumentation.java b/dd-java-agent/instrumentation/testng/testng-7/src/main/java/datadog/trace/instrumentation/testng7/TestNGExecutionInstrumentation.java
index 7a30dd10405..64a065a0042 100644
--- a/dd-java-agent/instrumentation/testng/testng-7/src/main/java/datadog/trace/instrumentation/testng7/TestNGExecutionInstrumentation.java
+++ b/dd-java-agent/instrumentation/testng/testng-7/src/main/java/datadog/trace/instrumentation/testng7/TestNGExecutionInstrumentation.java
@@ -11,7 +11,6 @@
import datadog.trace.instrumentation.testng.TracingListener;
import datadog.trace.instrumentation.testng.execution.RetryAnalyzer;
import datadog.trace.util.Strings;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Collections;
import java.util.Set;
import net.bytebuddy.asm.Advice;
@@ -96,7 +95,6 @@ public static void alignBeforeRetry(
}
@SuppressWarnings("bytebuddy-exception-suppression")
- @SuppressFBWarnings("NP_BOOLEAN_RETURN_NULL")
@Advice.OnMethodExit
public static void shouldRetryTestMethod(
@Advice.Argument(1) final ITestResult result,
diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle
index b3b9ae3bad3..200313e411c 100644
--- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle
+++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle
@@ -28,7 +28,7 @@ tasks.named("compileMain_java11Java", JavaCompile) {
dependencies {
main_java11CompileOnly group: 'org.eclipse.jetty.websocket', name: 'websocket-javax-server', version: '10.0.0'
- main_java11CompileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.2.0'
+ main_java11CompileOnly libs.spotbugs.annotations
testImplementation group: 'org.eclipse.jetty.websocket', name: 'websocket-javax-server', version: '10.0.0'
latestDepTestImplementation group: 'org.eclipse.jetty.websocket', name: 'websocket-javax-server', version: '10.+'
diff --git a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle
index 593826276fd..e7b7ebcde39 100644
--- a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle
+++ b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle
@@ -120,7 +120,8 @@ tasks.named("compileTestGroovy", GroovyCompile) {
["compileLatestDepTestGroovy", "compileLatestDepForkedTestGroovy"].each {
tasks.named(it, GroovyCompile) {
- configureCompiler(it, 17)}
+ configureCompiler(it, 17)
+ }
}
tasks.named("compileTestJava", JavaCompile) {
diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/server/http/TestHttpServer.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/server/http/TestHttpServer.groovy
index ea140c777f1..a346410db64 100644
--- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/server/http/TestHttpServer.groovy
+++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/server/http/TestHttpServer.groovy
@@ -42,7 +42,10 @@ import static org.eclipse.jetty.http.HttpMethod.GET
import static org.eclipse.jetty.http.HttpMethod.POST
import static org.eclipse.jetty.http.HttpMethod.PUT
-@SuppressFBWarnings("IS2_INCONSISTENT_SYNC")
+@SuppressFBWarnings([
+ "IS2_INCONSISTENT_SYNC",
+ "PA_PUBLIC_PRIMITIVE_ATTRIBUTE"
+])
class TestHttpServer implements AutoCloseable {
static TestHttpServer httpServer(@DelegatesTo(value = TestHttpServer, strategy = Closure.DELEGATE_FIRST) Closure spec) {
diff --git a/dd-smoke-tests/spring-boot-2.6-webflux/build.gradle b/dd-smoke-tests/spring-boot-2.6-webflux/build.gradle
index a37983936fe..516a2b79890 100644
--- a/dd-smoke-tests/spring-boot-2.6-webflux/build.gradle
+++ b/dd-smoke-tests/spring-boot-2.6-webflux/build.gradle
@@ -25,7 +25,8 @@ tasks.named("shadowJar", ShadowJar) {
transform(PropertiesFileTransformer) {
paths = ['META-INF/spring.factories']
mergeStrategy = "append"
- }}
+ }
+}
dependencies {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-webflux', version: '2.6.0+'
diff --git a/dd-trace-core/build.gradle b/dd-trace-core/build.gradle
index 7b111ed4e38..b2d17cc8ef1 100644
--- a/dd-trace-core/build.gradle
+++ b/dd-trace-core/build.gradle
@@ -80,8 +80,6 @@ dependencies {
implementation group: 'com.google.re2j', name: 're2j', version: '1.7'
- compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.2.0'
-
// We have autoservices defined in test subtree, looks like we need this to be able to properly rebuild this
testAnnotationProcessor libs.autoservice.processor
testCompileOnly libs.autoservice.annotation
diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateMetric.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateMetric.java
index c81015b52f0..9c16477bfad 100644
--- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateMetric.java
+++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/AggregateMetric.java
@@ -2,9 +2,13 @@
import datadog.trace.core.histogram.Histogram;
import datadog.trace.core.histogram.Histograms;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.concurrent.atomic.AtomicLongArray;
/** Not thread-safe. Accumulates counts and durations. */
+@SuppressFBWarnings(
+ value = {"AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE", "AT_STALE_THREAD_WRITE_OF_PRIMITIVE"},
+ justification = "Explicitly not thread-safe. Accumulates counts and durations.")
public final class AggregateMetric {
static final long ERROR_TAG = 0x8000000000000000L;
@@ -67,6 +71,7 @@ public Histogram getErrorLatencies() {
return errorLatencies;
}
+ @SuppressFBWarnings("AT_NONATOMIC_64BIT_PRIMITIVE")
public void clear() {
this.errorCount = 0;
this.hitCount = 0;
diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/Aggregator.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/Aggregator.java
index 049ab311a97..74675cb77a3 100644
--- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/Aggregator.java
+++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/Aggregator.java
@@ -34,7 +34,7 @@ final class Aggregator implements Runnable {
private final long sleepMillis;
- private boolean dirty;
+ private volatile boolean dirty;
Aggregator(
MetricWriter writer,
diff --git a/dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java b/dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java
index 66f9f468624..dec3a8eb9e5 100644
--- a/dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java
+++ b/dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java
@@ -6,6 +6,7 @@
import datadog.trace.core.DDSpan;
import datadog.trace.core.MetadataConsumer;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.TimeUnit;
@@ -32,6 +33,7 @@ public List firstTrace() {
return get(0);
}
+ @SuppressFBWarnings("NN_NAKED_NOTIFY")
@Override
public void write(List trace) {
if (!filter.accept(trace)) {
diff --git a/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/GenerationalUtf8Cache.java b/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/GenerationalUtf8Cache.java
index be50ff7103e..56b8e0d20d2 100644
--- a/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/GenerationalUtf8Cache.java
+++ b/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/GenerationalUtf8Cache.java
@@ -138,6 +138,7 @@ public int tenuredCapacity() {
}
/** Updates access time used @link {@link #getUtf8(String, String)} to the provided value */
+ @SuppressFBWarnings("AT_NONATOMIC_64BIT_PRIMITIVE")
public void updateAccessTime(long accessTimeMs) {
this.accessTimeMs = accessTimeMs;
}
diff --git a/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java b/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java
index 106eb57e474..75e562dfd05 100644
--- a/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java
+++ b/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java
@@ -91,7 +91,7 @@ static DDSpan create(
*/
private volatile long durationNano;
- private boolean forceKeep;
+ private volatile boolean forceKeep;
private volatile EndpointTracker endpointTracker;
diff --git a/dd-trace-core/src/main/java/datadog/trace/core/monitor/TracerHealthMetrics.java b/dd-trace-core/src/main/java/datadog/trace/core/monitor/TracerHealthMetrics.java
index 6d00ac646a5..54024e85721 100644
--- a/dd-trace-core/src/main/java/datadog/trace/core/monitor/TracerHealthMetrics.java
+++ b/dd-trace-core/src/main/java/datadog/trace/core/monitor/TracerHealthMetrics.java
@@ -14,6 +14,7 @@
import datadog.trace.common.writer.RemoteApi;
import datadog.trace.core.DDSpan;
import datadog.trace.util.AgentTaskScheduler;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -367,6 +368,8 @@ private static class Flush implements AgentTaskScheduler.Task tagPairs;
- private boolean canChangeDecisionMaker;
+ private volatile boolean canChangeDecisionMaker;
// extracted decision maker tag for easier updates
private volatile TagValue decisionMakerTagValue;
diff --git a/gradle/forbiddenapis.gradle b/gradle/forbiddenapis.gradle
index 7f94193dba4..4318766c9ac 100644
--- a/gradle/forbiddenapis.gradle
+++ b/gradle/forbiddenapis.gradle
@@ -18,7 +18,7 @@ buildscript {
}
dependencies {
- classpath "de.thetaphi:forbiddenapis:3.8"
+ classpath libs.forbiddenapis
}
}
@@ -33,12 +33,10 @@ forbiddenApis {
}
// disable forbiddenApis for all test tasks
-afterEvaluate {
- tasks.matching({it.name.startsWith('forbiddenApis') && it.name.endsWith('Test')}).configureEach {
- it.enabled = false
- }
+tasks.matching { it.name.startsWith('forbiddenApis') && it.name.endsWith('Test') }.configureEach {
+ it.enabled = false
}
dependencies {
- compileOnly group: 'de.thetaphi', name: 'forbiddenapis', version: '3.8'
+ compileOnly libs.forbiddenapis
}
diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties
new file mode 100644
index 00000000000..52234b5ce85
--- /dev/null
+++ b/gradle/gradle-daemon-jvm.properties
@@ -0,0 +1 @@
+toolchainVersion=21
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index c89ea692668..38a4f104980 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -3,6 +3,8 @@
# Build
develocity = "4.2.2"
+forbiddenapis = "3.10"
+spotbugs_annotations = "4.9.8"
# DataDog libs and forks
ddprof = "1.34.3"
@@ -71,6 +73,8 @@ testcontainers = "1.21.3"
[libraries]
# Build
develocity = { module = "com.gradle:develocity-gradle-plugin", version.ref = "develocity" }
+forbiddenapis = { module = "de.thetaphi:forbiddenapis", version.ref = "forbiddenapis" }
+spotbugs-annotations = { module = "com.github.spotbugs:spotbugs-annotations", version.ref = "spotbugs_annotations" }
# DataDog libs and forks
ddprof = { module = "com.datadoghq:ddprof", version.ref = "ddprof" }
diff --git a/gradle/spotbugFilters/exclude.xml b/gradle/spotbugFilters/exclude.xml
index 50ec78a6c56..2276ed212e0 100644
--- a/gradle/spotbugFilters/exclude.xml
+++ b/gradle/spotbugFilters/exclude.xml
@@ -3,7 +3,6 @@
-
diff --git a/gradle/spotbugs.gradle b/gradle/spotbugs.gradle
index e36e6ec8f09..2fea20bcdcf 100644
--- a/gradle/spotbugs.gradle
+++ b/gradle/spotbugs.gradle
@@ -5,53 +5,70 @@ spotbugs {
excludeFilter = file("$rootDir/gradle/spotbugFilters/exclude.xml")
}
-// configure spotbugs for Main tasks and disable it for all other
-afterEvaluate {
- tasks.withType(spotbugsMain.class).configureEach {
- def name = it.name
- if (name.endsWith("Main") || name.endsWith("Main_java11")) {
- it.ignoreFailures = false
- // detector documentation is in the following link:
- // https://spotbugs-in-kengo-toda.readthedocs.io/en/lqc-list-detectors/detectors.html
- it.omitVisitors = [
- 'DefaultEncodingDetector',
- 'DoInsideDoPrivileged',
- 'DontUseEnum',
- 'DroppedException',
- 'FindDeadLocalStores',
- 'FindHEmismatch',
- 'FindNullDeref',
- 'FindReturnRef',
- 'FindRunInvocations',
- 'FindUselessControlFlow',
- 'InitializationChain',
- 'LazyInit',
- 'LoadOfKnownNullValue',
- 'LostLoggerDueToWeakReference',
- 'MethodReturnCheck',
- 'MutableStaticFields',
- 'Naming',
- 'RuntimeExceptionCapture',
- 'SerializableIdiom',
- 'UnreadFields',
- ]
- it.reports {
- html {
- enabled = true
- destination = file("$buildDir/reports/spotbugs/${name}.html")
- stylesheet = 'fancy-hist.xsl'
- }
- }
- } else {
- it.enabled = false
+// Configure spotbugs for Main tasks and disable it for all other
+// Can't use the class here due to being different class
+tasks.matching { it.name.startsWith('spotbugs') }.configureEach {
+ // Needs Java 11+ to run spotbugs
+ it.launcher = javaToolchains.launcherFor {
+ it.languageVersion = JavaLanguageVersion.current()
+ }
+
+ def name = it.name
+ if (project.path.startsWith(":dd-smoke-tests")
+ || !(name.endsWith("Main")
+ || name.endsWith("Main_java11"))
+ ) {
+ it.enabled = false
+ return
+ }
+
+ it.showProgress = !providers.environmentVariable("CI").isPresent()
+ it.ignoreFailures = false
+ // detector documentation is in the following link:
+ // https://spotbugs-in-kengo-toda.readthedocs.io/en/lqc-list-detectors/detectors.html
+ it.omitVisitors = [
+ 'ConstructorThrow',
+ 'DefaultEncodingDetector',
+ 'DoInsideDoPrivileged',
+ 'DontUseEnum',
+ 'DroppedException',
+ 'FindDeadLocalStores',
+ 'FindHEmismatch',
+ 'FindNullDeref',
+ 'FindReturnRef',
+ 'FindRunInvocations',
+ 'FindUselessControlFlow',
+ 'InitializationChain',
+ 'LazyInit',
+ 'LoadOfKnownNullValue',
+ 'LostLoggerDueToWeakReference',
+ 'MethodReturnCheck',
+ 'MutableStaticFields',
+ 'Naming',
+ 'RuntimeExceptionCapture',
+ 'SerializableIdiom',
+ 'UnreadFields',
+ ]
+ it.reports {
+ html {
+ required = true
+ destination(file("$buildDir/reports/spotbugs/${name}.html"))
+ stylesheet = 'fancy-hist.xsl'
}
}
}
dependencies {
- compileOnly 'net.jcip:jcip-annotations:1.0'
- compileOnly 'com.github.spotbugs:spotbugs-annotations:4.2.0'
+ compileOnly(libs.spotbugs.annotations)
- testImplementation 'net.jcip:jcip-annotations:1.0'
- testImplementation 'com.github.spotbugs:spotbugs-annotations:4.2.0'
+ testImplementation(libs.spotbugs.annotations) {
+ // Exclude conflicting JUnit5.
+ exclude group: 'org.junit'
+ exclude group: 'org.junit.jupiter'
+ exclude group: 'org.junit.platform'
+ // Exclude conflicting logback.
+ exclude group: 'ch.qos.logback'
+ // Exclude conflicting log4j.
+ exclude group: 'org.apache.logging.log4j'
+ }
}
diff --git a/internal-api/build.gradle.kts b/internal-api/build.gradle.kts
index f05ab8f0b2a..df7d5802b47 100644
--- a/internal-api/build.gradle.kts
+++ b/internal-api/build.gradle.kts
@@ -1,3 +1,5 @@
+import com.github.spotbugs.snom.SpotBugsTask
+import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis
import groovy.lang.Closure
plugins {
@@ -22,6 +24,15 @@ fun AbstractCompile.configureCompiler(javaVersionInteger: Int, compatibilityVers
(project.extra["configureCompiler"] as Closure<*>).call(this, javaVersionInteger, compatibilityVersion, unsetReleaseFlagReason)
}
+tasks.named("forbiddenApisMain") {
+ // sun.* are accessible in JDK8, but maybe not accessible when this task is running
+ failOnMissingClasses = false
+}
+
+tasks.named("spotbugsMain") {
+ extraArgs.add("-noClassOk")
+}
+
val minimumBranchCoverage by extra(0.7)
val minimumInstructionCoverage by extra(0.8)
diff --git a/internal-api/internal-api-9/build.gradle.kts b/internal-api/internal-api-9/build.gradle.kts
index fa799f17919..753f55bcc2f 100644
--- a/internal-api/internal-api-9/build.gradle.kts
+++ b/internal-api/internal-api-9/build.gradle.kts
@@ -3,7 +3,7 @@ import java.nio.file.Paths
plugins {
`java-library`
- id("de.thetaphi.forbiddenapis") version "3.8"
+ id("de.thetaphi.forbiddenapis") version "3.10"
id("me.champeau.jmh")
idea
}
@@ -20,7 +20,7 @@ java {
}
}
-tasks.withType().configureEach() {
+tasks.withType().configureEach {
javadocTool = javaToolchains.javadocToolFor(java.toolchain)
}
diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java
index 70a40347e1f..d96faf1fdfd 100644
--- a/internal-api/src/main/java/datadog/trace/api/Config.java
+++ b/internal-api/src/main/java/datadog/trace/api/Config.java
@@ -707,7 +707,6 @@
import datadog.trace.util.Strings;
import datadog.trace.util.json.JsonPath;
import datadog.trace.util.throwable.FatalAgentMisconfigurationError;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
@@ -5602,7 +5601,6 @@ private static String getProp(String name, String def) {
}
// This has to be placed after all other static fields to give them a chance to initialize
- @SuppressFBWarnings("SI_INSTANCE_BEFORE_FINALS_ASSIGNED")
private static final Config INSTANCE =
new Config(
Platform.isNativeImageBuilder()
diff --git a/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java b/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java
index a2d2ae83169..037d04b1b44 100644
--- a/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java
+++ b/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java
@@ -106,6 +106,9 @@
* @see DynamicConfig for configuration that can be dynamically updated via remote-config
* @see Config for other configurations
*/
+@SuppressFBWarnings(
+ value = "SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR",
+ justification = "Instance also created in Config")
public class InstrumenterConfig {
private final ConfigProvider configProvider;
@@ -606,7 +609,6 @@ public boolean isRumEnabled() {
}
// This has to be placed after all other static fields to give them a chance to initialize
- @SuppressFBWarnings("SI_INSTANCE_BEFORE_FINALS_ASSIGNED")
private static final InstrumenterConfig INSTANCE =
new InstrumenterConfig(
Platform.isNativeImageBuilder()
diff --git a/internal-api/src/main/java/datadog/trace/api/gateway/Flow.java b/internal-api/src/main/java/datadog/trace/api/gateway/Flow.java
index 9e98eb89e02..2ee300568f0 100644
--- a/internal-api/src/main/java/datadog/trace/api/gateway/Flow.java
+++ b/internal-api/src/main/java/datadog/trace/api/gateway/Flow.java
@@ -1,6 +1,7 @@
package datadog.trace.api.gateway;
import datadog.appsec.api.blocking.BlockingContentType;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Collections;
import java.util.Map;
@@ -69,6 +70,9 @@ public Map getExtraHeaders() {
}
}
+ @SuppressFBWarnings(
+ value = "SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR",
+ justification = "Not a singleton")
class ResultFlow implements Flow {
@SuppressWarnings("rawtypes")
private static final ResultFlow EMPTY = new ResultFlow<>(null);
diff --git a/internal-api/src/main/java/datadog/trace/api/remoteconfig/ServiceNameCollector.java b/internal-api/src/main/java/datadog/trace/api/remoteconfig/ServiceNameCollector.java
index c4f78b22c58..f2fcd105dc3 100644
--- a/internal-api/src/main/java/datadog/trace/api/remoteconfig/ServiceNameCollector.java
+++ b/internal-api/src/main/java/datadog/trace/api/remoteconfig/ServiceNameCollector.java
@@ -30,7 +30,7 @@ public static ServiceNameCollector get() {
volatile boolean limitReachedLogged = false;
- ServiceNameCollector() {
+ private ServiceNameCollector() {
// singleton
}
diff --git a/internal-api/src/main/java/datadog/trace/api/rum/RumInjector.java b/internal-api/src/main/java/datadog/trace/api/rum/RumInjector.java
index ef77cff0e47..5683f29372c 100644
--- a/internal-api/src/main/java/datadog/trace/api/rum/RumInjector.java
+++ b/internal-api/src/main/java/datadog/trace/api/rum/RumInjector.java
@@ -4,9 +4,13 @@
import datadog.trace.api.InstrumenterConfig;
import datadog.trace.api.cache.DDCache;
import datadog.trace.api.cache.DDCaches;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.function.Function;
import javax.annotation.Nullable;
+@SuppressFBWarnings(
+ value = "SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR",
+ justification = "Usage in tests")
public final class RumInjector {
private static final RumInjector INSTANCE =
new RumInjector(Config.get(), InstrumenterConfig.get());
diff --git a/internal-api/src/main/java/datadog/trace/api/telemetry/EndpointCollector.java b/internal-api/src/main/java/datadog/trace/api/telemetry/EndpointCollector.java
index b8434bfddae..ed888c1ff43 100644
--- a/internal-api/src/main/java/datadog/trace/api/telemetry/EndpointCollector.java
+++ b/internal-api/src/main/java/datadog/trace/api/telemetry/EndpointCollector.java
@@ -2,9 +2,13 @@
import static java.util.Collections.emptyIterator;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicReference;
+@SuppressFBWarnings(
+ value = "SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR",
+ justification = "Usage in tests")
public class EndpointCollector {
private static final EndpointCollector INSTANCE = new EndpointCollector();
diff --git a/internal-api/src/main/java/datadog/trace/api/telemetry/LogCollector.java b/internal-api/src/main/java/datadog/trace/api/telemetry/LogCollector.java
index 2348843d6da..4ecd730e4f2 100644
--- a/internal-api/src/main/java/datadog/trace/api/telemetry/LogCollector.java
+++ b/internal-api/src/main/java/datadog/trace/api/telemetry/LogCollector.java
@@ -1,5 +1,6 @@
package datadog.trace.api.telemetry;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -29,7 +30,9 @@ private LogCollector() {
this(DEFAULT_MAX_CAPACITY);
}
- // For testing purpose
+ @SuppressFBWarnings(
+ value = "SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR",
+ justification = "Usage in tests")
LogCollector(int maxCapacity) {
this.maxCapacity = maxCapacity;
this.rawLogMessages = new ConcurrentHashMap<>(maxCapacity);
diff --git a/internal-api/src/main/java/datadog/trace/util/AgentTaskScheduler.java b/internal-api/src/main/java/datadog/trace/util/AgentTaskScheduler.java
index 5a99a4290f5..af338b01444 100644
--- a/internal-api/src/main/java/datadog/trace/util/AgentTaskScheduler.java
+++ b/internal-api/src/main/java/datadog/trace/util/AgentTaskScheduler.java
@@ -19,6 +19,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+@SuppressFBWarnings(
+ value = "SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR",
+ justification = "Not a singleton")
public class AgentTaskScheduler implements Executor {
private static final Logger log = LoggerFactory.getLogger(AgentTaskScheduler.class);
diff --git a/internal-api/src/main/java/datadog/trace/util/json/JsonPath.java b/internal-api/src/main/java/datadog/trace/util/json/JsonPath.java
index 15774b80fb9..1c1c7221def 100644
--- a/internal-api/src/main/java/datadog/trace/util/json/JsonPath.java
+++ b/internal-api/src/main/java/datadog/trace/util/json/JsonPath.java
@@ -123,7 +123,7 @@ private static final class Singleton extends Segment {
private final String repr;
- public Singleton(String repr) {
+ private Singleton(String repr) {
super();
this.repr = repr;
}
diff --git a/internal-api/src/main/java/datadog/trace/util/stacktrace/HotSpotStackWalker.java b/internal-api/src/main/java/datadog/trace/util/stacktrace/HotSpotStackWalker.java
index 4eac781efb9..6621478b502 100644
--- a/internal-api/src/main/java/datadog/trace/util/stacktrace/HotSpotStackWalker.java
+++ b/internal-api/src/main/java/datadog/trace/util/stacktrace/HotSpotStackWalker.java
@@ -1,18 +1,19 @@
package datadog.trace.util.stacktrace;
import datadog.environment.JavaVirtualMachine;
+import de.thetaphi.forbiddenapis.SuppressForbidden;
import java.util.function.Function;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public class HotSpotStackWalker extends AbstractStackWalker {
+ @SuppressForbidden sun.misc.JavaLangAccess access;
- sun.misc.JavaLangAccess access;
-
+ @SuppressForbidden
HotSpotStackWalker() {
try {
access = sun.misc.SharedSecrets.getJavaLangAccess();
- } catch (Throwable e) {
+ } catch (Throwable ignored) {
}
}
diff --git a/internal-api/src/test/groovy/datadog/trace/api/env/FixedCapturedEnvironment.java b/internal-api/src/test/groovy/datadog/trace/api/env/FixedCapturedEnvironment.java
index ab4f430a181..cccc9f0fda6 100644
--- a/internal-api/src/test/groovy/datadog/trace/api/env/FixedCapturedEnvironment.java
+++ b/internal-api/src/test/groovy/datadog/trace/api/env/FixedCapturedEnvironment.java
@@ -4,6 +4,8 @@
/** Helper class that has access to {@link CapturedEnvironment} */
public class FixedCapturedEnvironment {
+ private FixedCapturedEnvironment() {}
+
/** Load properties instance into the {@code CapturedEnvironment} instance. */
public static void useFixedEnv(final Map properties) {
CapturedEnvironment.useFixedEnv(properties);
diff --git a/remote-config/remote-config-core/src/main/java/datadog/remoteconfig/PollerScheduler.java b/remote-config/remote-config-core/src/main/java/datadog/remoteconfig/PollerScheduler.java
index a1bade6df5e..93a47be51f0 100644
--- a/remote-config/remote-config-core/src/main/java/datadog/remoteconfig/PollerScheduler.java
+++ b/remote-config/remote-config-core/src/main/java/datadog/remoteconfig/PollerScheduler.java
@@ -2,11 +2,13 @@
import datadog.trace.api.Config;
import datadog.trace.util.AgentTaskScheduler;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** Handles scheduling scheme for polling configuration */
+@SuppressFBWarnings("AT_NONATOMIC_64BIT_PRIMITIVE")
class PollerScheduler {
private static final Logger LOGGER = LoggerFactory.getLogger(PollerScheduler.class);
diff --git a/telemetry/src/test/groovy/datadog/telemetry/dependency/DependencyResolverQueueSpecification.groovy b/telemetry/src/test/groovy/datadog/telemetry/dependency/DependencyResolverQueueSpecification.groovy
index 89f6237dcbd..18825f3b2fb 100644
--- a/telemetry/src/test/groovy/datadog/telemetry/dependency/DependencyResolverQueueSpecification.groovy
+++ b/telemetry/src/test/groovy/datadog/telemetry/dependency/DependencyResolverQueueSpecification.groovy
@@ -98,6 +98,5 @@ class DependencyResolverQueueSpecification extends DepSpecification {
then:
assert deps.isEmpty()
-
}
}
diff --git a/utils/config-utils/src/main/java/datadog/trace/api/ConfigCollector.java b/utils/config-utils/src/main/java/datadog/trace/api/ConfigCollector.java
index 4cbaf5acf6b..a7ec9a83265 100644
--- a/utils/config-utils/src/main/java/datadog/trace/api/ConfigCollector.java
+++ b/utils/config-utils/src/main/java/datadog/trace/api/ConfigCollector.java
@@ -19,6 +19,8 @@
public class ConfigCollector {
private static final ConfigCollector INSTANCE = new ConfigCollector();
+ private ConfigCollector() {}
+
private static final AtomicReferenceFieldUpdater COLLECTED_UPDATER =
AtomicReferenceFieldUpdater.newUpdater(ConfigCollector.class, Map.class, "collected");
diff --git a/utils/config-utils/src/main/java/datadog/trace/api/env/CapturedEnvironment.java b/utils/config-utils/src/main/java/datadog/trace/api/env/CapturedEnvironment.java
index d4b618af913..44e55b6fd18 100644
--- a/utils/config-utils/src/main/java/datadog/trace/api/env/CapturedEnvironment.java
+++ b/utils/config-utils/src/main/java/datadog/trace/api/env/CapturedEnvironment.java
@@ -41,7 +41,7 @@ public ProcessInfo() {
private final Map properties;
private ProcessInfo processInfo;
- CapturedEnvironment() {
+ private CapturedEnvironment() {
properties = new HashMap<>();
processInfo = new ProcessInfo();
properties.put(GeneralConfig.SERVICE_NAME, autodetectServiceName());
diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java
index 48ea802b1f7..59c183a4700 100644
--- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java
+++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java
@@ -11,6 +11,7 @@
import org.slf4j.LoggerFactory;
public class ConfigHelper {
+ private ConfigHelper() {}
/** Config Inversion strictness policy for enforcement of undocumented environment variables */
public enum StrictnessPolicy {
diff --git a/utils/config-utils/src/test/groovy/datadog/trace/api/env/CapturedEnvironmentTest.groovy b/utils/config-utils/src/test/groovy/datadog/trace/api/env/CapturedEnvironmentTest.groovy
index bbac5c99bcb..78c52635898 100644
--- a/utils/config-utils/src/test/groovy/datadog/trace/api/env/CapturedEnvironmentTest.groovy
+++ b/utils/config-utils/src/test/groovy/datadog/trace/api/env/CapturedEnvironmentTest.groovy
@@ -1,10 +1,10 @@
package datadog.trace.api.env
+import static java.io.File.separator
+
import datadog.trace.api.config.GeneralConfig
import datadog.trace.test.util.DDSpecification
-import static java.io.File.separator
-
class CapturedEnvironmentTest extends DDSpecification {
def "non autodetected service.name with null command"() {
when:
@@ -143,7 +143,7 @@ class CapturedEnvironmentTest extends DDSpecification {
System.setProperty('sun.java.command', sunJavaCommand)
}
}
- def capturedEnv = new CapturedEnvironment()
+ def capturedEnv = CapturedEnvironment.get()
def props = capturedEnv.properties
println props.get(GeneralConfig.SERVICE_NAME)
}
diff --git a/utils/container-utils/src/main/java/datadog/common/container/ContainerInfo.java b/utils/container-utils/src/main/java/datadog/common/container/ContainerInfo.java
index df54d9d2a48..479e343255a 100644
--- a/utils/container-utils/src/main/java/datadog/common/container/ContainerInfo.java
+++ b/utils/container-utils/src/main/java/datadog/common/container/ContainerInfo.java
@@ -53,9 +53,16 @@ public class ContainerInfo {
private static final String ENTITY_ID;
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public String containerId;
+
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public String containerTagsHash;
+
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public String podId;
+
+ @SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
public List cGroups = new ArrayList<>();
public String getContainerId() {
diff --git a/utils/container-utils/src/main/java/datadog/common/container/ServerlessInfo.java b/utils/container-utils/src/main/java/datadog/common/container/ServerlessInfo.java
index c299be8b34a..8603deac8cf 100644
--- a/utils/container-utils/src/main/java/datadog/common/container/ServerlessInfo.java
+++ b/utils/container-utils/src/main/java/datadog/common/container/ServerlessInfo.java
@@ -22,7 +22,10 @@ private ServerlessInfo(final String extensionPath) {
}
}
- @SuppressFBWarnings("DMI_HARDCODED_ABSOLUTE_FILENAME")
+ @SuppressFBWarnings({
+ "DMI_HARDCODED_ABSOLUTE_FILENAME",
+ "SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR"
+ })
public ServerlessInfo() {
// TODO add more serverless configuration properties
// support envs other than AWS lambda
diff --git a/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy b/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy
index 7b2ee0f2c27..e7967d38006 100644
--- a/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy
+++ b/utils/test-utils/src/main/groovy/datadog/trace/test/util/DDSpecification.groovy
@@ -2,12 +2,11 @@ package datadog.trace.test.util
import datadog.environment.EnvironmentVariables
import de.thetaphi.forbiddenapis.SuppressForbidden
-import spock.lang.Shared
-import spock.lang.Specification
-
import java.lang.reflect.Constructor
import java.lang.reflect.Field
import java.lang.reflect.Modifier
+import spock.lang.Shared
+import spock.lang.Specification
@SuppressForbidden
abstract class DDSpecification extends Specification {
diff --git a/utils/test-utils/src/main/java/datadog/trace/test/util/GCUtils.java b/utils/test-utils/src/main/java/datadog/trace/test/util/GCUtils.java
index ad7333202a7..93683ee22b2 100644
--- a/utils/test-utils/src/main/java/datadog/trace/test/util/GCUtils.java
+++ b/utils/test-utils/src/main/java/datadog/trace/test/util/GCUtils.java
@@ -2,11 +2,9 @@
import static java.util.concurrent.TimeUnit.MINUTES;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.lang.ref.WeakReference;
import java.util.concurrent.TimeUnit;
-@SuppressFBWarnings("DM_GC")
public abstract class GCUtils {
public static void awaitGC() throws InterruptedException {