Skip to content

Commit bb30840

Browse files
authored
Merge branch 'master' into mhlidd/additional_config_inversion_linters
2 parents 3e8b524 + c714e59 commit bb30840

File tree

91 files changed

+204
-252
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+204
-252
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ plugins {
1010
id("dd-trace-java.ci-jobs")
1111

1212
id("com.diffplug.spotless") version "6.13.0"
13-
id("com.github.spotbugs") version "6.4.7"
14-
id("de.thetaphi.forbiddenapis") version "3.10"
13+
id("com.github.spotbugs") version "5.0.14"
14+
id("de.thetaphi.forbiddenapis") version "3.8"
1515
id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
1616
id("com.gradleup.shadow") version "8.3.6" apply false
1717
id("me.champeau.jmh") version "0.7.3" apply false

buildSrc/call-site-instrumentation-plugin/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ dependencies {
3838
testImplementation(libs.groovy)
3939
testImplementation(libs.bundles.spock)
4040
testImplementation("javax.servlet", "javax.servlet-api", "3.0.1")
41-
testImplementation(libs.spotbugs.annotations)
41+
testImplementation("com.github.spotbugs", "spotbugs-annotations", "4.2.0")
4242
}
4343

4444
sourceSets {

buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,40 @@ private fun loadConfigFields(
6666
}
6767
}
6868

69+
// Data class for fields from generated class
70+
private data class LoadedConfigFields(
71+
val supported: Set<String>,
72+
val aliasMapping: Map<String, String> = emptyMap()
73+
)
74+
75+
// Cache for fields from generated class
76+
private var cachedConfigFields: LoadedConfigFields? = null
77+
78+
// Helper function to load fields from the generated class
79+
private fun loadConfigFields(
80+
mainSourceSetOutput: org.gradle.api.file.FileCollection,
81+
generatedClassName: String
82+
): LoadedConfigFields {
83+
return cachedConfigFields ?: run {
84+
val urls = mainSourceSetOutput.files.map { it.toURI().toURL() }.toTypedArray()
85+
URLClassLoader(urls, LoadedConfigFields::class.java.classLoader).use { cl ->
86+
val clazz = Class.forName(generatedClassName, true, cl)
87+
88+
val supportedField = clazz.getField("SUPPORTED").get(null)
89+
@Suppress("UNCHECKED_CAST")
90+
val supportedSet = when (supportedField) {
91+
is Set<*> -> supportedField as Set<String>
92+
is Map<*, *> -> supportedField.keys as Set<String>
93+
else -> throw IllegalStateException("SUPPORTED field must be either Set<String> or Map<String, Any>, but was ${supportedField?.javaClass}")
94+
}
95+
96+
@Suppress("UNCHECKED_CAST")
97+
val aliasMappingMap = clazz.getField("ALIAS_MAPPING").get(null) as Map<String, String>
98+
LoadedConfigFields(supportedSet, aliasMappingMap)
99+
}.also { cachedConfigFields = it }
100+
}
101+
}
102+
69103
/** Registers `logEnvVarUsages` (scan for DD_/OTEL_ tokens and fail if unsupported). */
70104
private fun registerLogEnvVarUsages(target: Project, extension: SupportedTracerConfigurations) {
71105
val ownerPath = extension.configOwnerPath

communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import datadog.remoteconfig.DefaultConfigurationPoller;
1212
import datadog.trace.api.Config;
1313
import datadog.trace.util.AgentTaskScheduler;
14-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
1514
import java.security.Security;
1615
import java.util.ArrayList;
1716
import java.util.List;
@@ -32,7 +31,6 @@ public class SharedCommunicationObjects {
3231
* HTTP client for making requests to Datadog agent. Depending on configuration, this client may
3332
* use regular HTTP, UDS or named pipe.
3433
*/
35-
@SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
3634
public OkHttpClient agentHttpClient;
3735

3836
/**
@@ -41,18 +39,10 @@ public class SharedCommunicationObjects {
4139
*/
4240
private volatile OkHttpClient intakeHttpClient;
4341

44-
@SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
4542
public long httpClientTimeout;
46-
47-
@SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
4843
public boolean forceClearTextHttpForIntakeClient;
49-
50-
@SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
5144
public HttpUrl agentUrl;
52-
53-
@SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE")
5445
public Monitoring monitoring;
55-
5646
private volatile DDAgentFeaturesDiscovery featuresDiscovery;
5747
private ConfigurationPoller configurationPoller;
5848

communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
public final class DDAgentStatsDClientManager implements StatsDClientManager {
1717
private static final DDAgentStatsDClientManager INSTANCE = new DDAgentStatsDClientManager();
1818

19-
private DDAgentStatsDClientManager() {}
20-
2119
private static final boolean USE_LOGGING_CLIENT =
2220
LOGGING_WRITER_TYPE.equals(Config.get().getWriterType());
2321

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import datadog.trace.util.AgentTaskScheduler;
5959
import datadog.trace.util.AgentThreadFactory.AgentThread;
6060
import datadog.trace.util.throwable.FatalAgentMisconfigurationError;
61-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
6261
import java.lang.instrument.Instrumentation;
6362
import java.lang.reflect.InvocationTargetException;
6463
import java.lang.reflect.Method;
@@ -203,7 +202,6 @@ private static void safelySetContextClassLoader(ClassLoader classLoader) {
203202
* <p>The Agent is considered to start successfully if Instrumentation can be activated. All other
204203
* pieces are considered optional.
205204
*/
206-
@SuppressFBWarnings("AT_STALE_THREAD_WRITE_OF_PRIMITIVE")
207205
public static void start(
208206
final Object bootstrapInitTelemetry,
209207
final Instrumentation inst,
@@ -462,7 +460,6 @@ private static void injectAgentArgsConfig(String agentArgs) {
462460
}
463461
}
464462

465-
@SuppressFBWarnings("AT_STALE_THREAD_WRITE_OF_PRIMITIVE")
466463
private static void configureCiVisibility(URL agentJarURL) {
467464
// Retro-compatibility for the old way to configure CI Visibility
468465
if ("true".equals(ddGetProperty("dd.integration.junit.enabled"))

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/PatchLogger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static PatchLogger getAnonymousLogger(final String resourceBundleName) {
2929
return SAFE_LOGGER;
3030
}
3131

32-
private PatchLogger(final String name, final String resourceBundleName) {
32+
protected PatchLogger(final String name, final String resourceBundleName) {
3333
// super(name, resourceBundleName);
3434
}
3535

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jms/SessionState.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import datadog.trace.api.Config;
44
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
5+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
56
import java.util.ArrayDeque;
67
import java.util.Collections;
78
import java.util.Comparator;
@@ -64,6 +65,7 @@ public int compare(Map.Entry<Thread, TimeInQueue> o1, Map.Entry<Thread, TimeInQu
6465
private volatile int timeInQueueSpanCount = 0;
6566

6667
// this field is protected by synchronization of capturedSpans, but SpotBugs miss that
68+
@SuppressFBWarnings("IS2_INCONSISTENT_SYNC")
6769
private boolean capturingFlipped = false;
6870

6971
public SessionState(int ackMode, boolean timeInQueueEnabled) {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/execution/RetryUntilSuccessful.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,9 @@
33
import datadog.trace.api.civisibility.execution.TestExecutionPolicy;
44
import datadog.trace.api.civisibility.execution.TestStatus;
55
import datadog.trace.api.civisibility.telemetry.tag.RetryReason;
6-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
76
import java.util.concurrent.atomic.AtomicInteger;
87

98
/** Retries a test case if it failed, up to a maximum number of times. */
10-
@SuppressFBWarnings(
11-
value = {"AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE", "AT_STALE_THREAD_WRITE_OF_PRIMITIVE"},
12-
justification =
13-
"TestExecutionPolicy instances are confined to a single thread and are not meant to be thread-safe")
149
public class RetryUntilSuccessful implements TestExecutionPolicy {
1510

1611
private final int maxExecutions;

dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestTestRunner.groovy

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@ import datadog.trace.agent.test.utils.OkHttpUtils
66
import datadog.trace.api.gateway.IGSpanInfo
77
import datadog.trace.api.gateway.RequestContext
88
import datadog.trace.api.gateway.RequestContextSlot
9-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
109
import okhttp3.OkHttpClient
1110

1211
import java.util.concurrent.LinkedBlockingQueue
1312
import java.util.concurrent.TimeUnit
1413

15-
@SuppressFBWarnings("HSM_HIDING_METHOD")
1614
class IastRequestTestRunner extends IastAgentTestRunner implements IastRequestContextPreparationTrait {
1715

1816
private static final LinkedBlockingQueue<TaintedObjectCollection> TAINTED_OBJECTS = new LinkedBlockingQueue<>()

0 commit comments

Comments
 (0)