diff --git a/.github/workflows/auto-spotless-check.yml b/.github/workflows/auto-spotless-check.yml index 5226b6728..422e4fa44 100644 --- a/.github/workflows/auto-spotless-check.yml +++ b/.github/workflows/auto-spotless-check.yml @@ -22,7 +22,7 @@ jobs: uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Set up gradle uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0 diff --git a/.github/workflows/build-common.yml b/.github/workflows/build-common.yml index a792503d9..20493a46c 100644 --- a/.github/workflows/build-common.yml +++ b/.github/workflows/build-common.yml @@ -27,7 +27,7 @@ jobs: uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Set up Gradle uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0 @@ -48,7 +48,7 @@ jobs: uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Set up Gradle uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0 @@ -106,7 +106,7 @@ jobs: uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Set up Gradle uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2a465c746..1820bd005 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,7 +32,7 @@ jobs: uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Set up gradle uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index f793ebbf7..f2dfba7f0 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -38,12 +38,12 @@ jobs: steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - - name: Set up Java 17 + - name: Set up Java if: matrix.language == 'java' uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Set up gradle if: matrix.language == 'java' diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 53258f82a..000e992cf 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -25,7 +25,7 @@ jobs: uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Set up gradle uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0 diff --git a/.github/workflows/owasp-dependency-check-daily.yml b/.github/workflows/owasp-dependency-check-daily.yml index ce160b330..664a6a214 100644 --- a/.github/workflows/owasp-dependency-check-daily.yml +++ b/.github/workflows/owasp-dependency-check-daily.yml @@ -21,7 +21,7 @@ jobs: uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Increase gradle daemon heap size run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 097433535..751ef279a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -86,7 +86,7 @@ jobs: uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Set up gradle uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0 @@ -234,7 +234,7 @@ jobs: uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0 with: distribution: temurin - java-version: 17 + java-version: 21 - name: Set up Gradle uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d6e0a0a36..3c90039e4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ Pull requests for bug fixes are always welcome! ## Building and Testing -While most modules target Java 8, building this project requires Java 17 or higher. +While most modules target Java 8, building this project requires Java 21 or higher. To build the project: diff --git a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/SimpleHttpClient.java b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/SimpleHttpClient.java index f78719d99..ba9bf7517 100644 --- a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/SimpleHttpClient.java +++ b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/SimpleHttpClient.java @@ -27,7 +27,6 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import okhttp3.ResponseBody; /** A simple HTTP client based on OkHttp. Not meant for high throughput. */ final class SimpleHttpClient { @@ -83,8 +82,7 @@ public String fetchString( + response.message()); return ""; } - ResponseBody body = response.body(); - return body != null ? body.string() : ""; + return response.body().string(); } catch (IOException e) { logger.log(FINE, "SimpleHttpClient fetch string failed.", e); } diff --git a/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/XraySamplerClient.java b/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/XraySamplerClient.java index 84dbd0144..ef47ba725 100644 --- a/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/XraySamplerClient.java +++ b/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/XraySamplerClient.java @@ -46,7 +46,6 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import okhttp3.ResponseBody; final class XraySamplerClient { @@ -125,11 +124,7 @@ private static String readResponse(Response response, String endpoint) throws IO return ""; } - ResponseBody body = response.body(); - if (body != null) { - return body.string(); - } - return ""; + return response.body().string(); } // Visible for testing diff --git a/buildSrc/src/main/kotlin/otel.errorprone-conventions.gradle.kts b/buildSrc/src/main/kotlin/otel.errorprone-conventions.gradle.kts index 113576db3..4502a84c6 100644 --- a/buildSrc/src/main/kotlin/otel.errorprone-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/otel.errorprone-conventions.gradle.kts @@ -50,7 +50,6 @@ tasks { // TODO (trask) use animal sniffer disable("Java8ApiChecker") - disable("AndroidJdkLibsChecker") // apparently disabling android doesn't disable this disable("StaticOrDefaultInterfaceMethod") diff --git a/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts index 70bd9687b..add3d03a0 100644 --- a/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts @@ -18,7 +18,7 @@ group = "io.opentelemetry.contrib" base.archivesName.set("opentelemetry-${project.name}") // Version to use to compile code and run tests. -val DEFAULT_JAVA_VERSION = JavaVersion.VERSION_17 +val DEFAULT_JAVA_VERSION = JavaVersion.VERSION_21 java { toolchain { @@ -60,6 +60,7 @@ tasks { if (name.contains("Test")) { // serialVersionUI is basically guaranteed to be useless in tests compilerArgs.add("-Xlint:-serial") + compilerArgs.add("-Xlint:-this-escape") } } } diff --git a/consistent-sampling/src/main/java/io/opentelemetry/contrib/sampler/consistent56/ConsistentVariableThresholdSampler.java b/consistent-sampling/src/main/java/io/opentelemetry/contrib/sampler/consistent56/ConsistentVariableThresholdSampler.java index 1558e961c..9d356d49b 100644 --- a/consistent-sampling/src/main/java/io/opentelemetry/contrib/sampler/consistent56/ConsistentVariableThresholdSampler.java +++ b/consistent-sampling/src/main/java/io/opentelemetry/contrib/sampler/consistent56/ConsistentVariableThresholdSampler.java @@ -16,7 +16,7 @@ public class ConsistentVariableThresholdSampler extends ConsistentThresholdSampl private volatile String description = ""; protected ConsistentVariableThresholdSampler(double samplingProbability) { - setSamplingProbability(samplingProbability); + updateSamplingProbability(samplingProbability); } @Override @@ -30,6 +30,10 @@ public long getThreshold() { } public void setSamplingProbability(double samplingProbability) { + updateSamplingProbability(samplingProbability); + } + + private void updateSamplingProbability(double samplingProbability) { long threshold = calculateThreshold(samplingProbability); checkThreshold(threshold); this.threshold = threshold; diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index ec7cdec0e..0bcc53732 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -27,8 +27,8 @@ dependencies { api("com.google.auto.service:auto-service-annotations:1.1.1") api("com.google.auto.value:auto-value:1.11.0") api("com.google.auto.value:auto-value-annotations:1.11.0") - api("com.google.errorprone:error_prone_annotations:2.42.0") - api("com.google.errorprone:error_prone_core:2.42.0") + api("com.google.errorprone:error_prone_annotations:2.43.0") + api("com.google.errorprone:error_prone_core:2.43.0") api("io.github.netmikey.logunit:logunit-jul:2.0.0") api("io.opentelemetry.proto:opentelemetry-proto:1.8.0-alpha") api("io.prometheus:simpleclient:0.16.0") diff --git a/disk-buffering/build.gradle.kts b/disk-buffering/build.gradle.kts index c36d73588..b3e775be0 100644 --- a/disk-buffering/build.gradle.kts +++ b/disk-buffering/build.gradle.kts @@ -63,6 +63,12 @@ tasks.named("shadowJar") { mustRunAfter("jar") } +tasks { + test { + dependsOn("shadowJar") + } +} + // The javadoc from wire's generated classes has errors that make the task that generates the "javadoc" artifact to fail. This // makes the javadoc task to ignore those generated classes. tasks.withType(Javadoc::class.java) { @@ -75,3 +81,11 @@ tasks.withType(Javadoc::class.java) { tasks.named("sourcesJar", Jar::class.java) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } + +tasks.withType().configureEach { + with(options) { + // classes generated from proto trigger + // warning: [serial] non-transient instance field of a serializable class declared with a non-serializable type + compilerArgs.add("-Xlint:-serial") + } +} diff --git a/inferred-spans/src/main/java/io/opentelemetry/contrib/inferredspans/internal/SamplingProfiler.java b/inferred-spans/src/main/java/io/opentelemetry/contrib/inferredspans/internal/SamplingProfiler.java index 27d0e5305..90a2bc250 100644 --- a/inferred-spans/src/main/java/io/opentelemetry/contrib/inferredspans/internal/SamplingProfiler.java +++ b/inferred-spans/src/main/java/io/opentelemetry/contrib/inferredspans/internal/SamplingProfiler.java @@ -165,6 +165,7 @@ public class SamplingProfiler implements Runnable { * @param activationEventsFile activation events file, if {@literal null} a temp file will be used * @param jfrFile java flight recorder file, if {@literal null} a temp file will be used instead */ + @SuppressWarnings("this-escape") public SamplingProfiler( InferredSpansConfiguration config, SpanAnchoredClock nanoClock, diff --git a/opamp-client/build.gradle.kts b/opamp-client/build.gradle.kts index 8abbbee65..767892572 100644 --- a/opamp-client/build.gradle.kts +++ b/opamp-client/build.gradle.kts @@ -1,6 +1,6 @@ import java.io.FileOutputStream import java.io.InputStream -import java.net.URL +import java.net.URI plugins { id("otel.java-conventions") @@ -38,6 +38,14 @@ wire { } } +tasks.withType().configureEach { + with(options) { + // classes generated from proto trigger + // warning: [serial] non-transient instance field of a serializable class declared with a non-serializable type + compilerArgs.add("-Xlint:-serial") + } +} + abstract class DownloadAndExtractOpampProtos @Inject constructor( private val archiveOps: ArchiveOperations, private val fileOps: FileSystemOperations, @@ -54,7 +62,7 @@ abstract class DownloadAndExtractOpampProtos @Inject constructor( @TaskAction fun execute() { - val url = URL(zipUrl.get()) + val url = URI.create(zipUrl.get()).toURL() downloadedZipFile.get().asFile.parentFile.mkdirs() url.openStream().use { input: InputStream ->