diff --git a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EcsResource.java b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EcsResource.java index 83440819b..28737926d 100644 --- a/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EcsResource.java +++ b/aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EcsResource.java @@ -193,9 +193,7 @@ static void parseResponse( DockerImage parsedImage = DockerImage.parse(value); if (parsedImage != null) { attrBuilders.put(CONTAINER_IMAGE_NAME, parsedImage.getRepository()); - attrBuilders.put( - io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CONTAINER_IMAGE_TAGS, - parsedImage.getTag()); + attrBuilders.put(IncubatingAttributes.CONTAINER_IMAGE_TAGS, parsedImage.getTag()); } break; case "ImageID": diff --git a/buildSrc/src/main/kotlin/otel.errorprone-conventions.gradle.kts b/buildSrc/src/main/kotlin/otel.errorprone-conventions.gradle.kts index 1fc369ca8..034a885da 100644 --- a/buildSrc/src/main/kotlin/otel.errorprone-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/otel.errorprone-conventions.gradle.kts @@ -10,6 +10,7 @@ plugins { dependencies { errorprone("com.google.errorprone:error_prone_core") errorprone("com.uber.nullaway:nullaway") + errorprone(project(":custom-checks")) } val disableErrorProne = properties["disableErrorProne"]?.toString()?.toBoolean() ?: false @@ -45,10 +46,6 @@ tasks { // Suggests using Guava types for fields but we don't use Guava disable("ImmutableMemberCollection") - // Fully qualified names may be necessary when deprecating a class to avoid - // deprecation warning. - disable("UnnecessarilyFullyQualified") - // TODO (trask) use animal sniffer disable("Java8ApiChecker") @@ -110,3 +107,14 @@ tasks { } } } + +// Our conventions apply this project as a dependency in the errorprone configuration, which would cause +// a circular dependency if trying to compile this project with that still there. So we filter this +// project out. +configurations { + named("errorprone") { + dependencies.removeIf { + it is ProjectDependency && it.name == project.name + } + } +} diff --git a/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts index 425085623..77da06afa 100644 --- a/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts @@ -48,6 +48,10 @@ tasks { "-Xlint:-processing", // We suppress the "options" warning because it prevents compilation on modern JDKs "-Xlint:-options", + // We suppress the "deprecation" warning because --release 8 causes javac to warn on + // importing deprecated classes (fixed in JDK 9+, see https://bugs.openjdk.org/browse/JDK-8032211). + // We use a custom Error Prone check instead (OtelDeprecatedApiUsage). + "-Xlint:-deprecation", // Fail build on any warning "-Werror", diff --git a/custom-checks/build.gradle.kts b/custom-checks/build.gradle.kts new file mode 100644 index 000000000..dce920530 --- /dev/null +++ b/custom-checks/build.gradle.kts @@ -0,0 +1,87 @@ +plugins { + id("otel.java-conventions") +} + +dependencies { + compileOnly("com.google.errorprone:error_prone_core") + + testImplementation("com.google.errorprone:error_prone_test_helpers") +} + +otelJava.moduleName.set("io.opentelemetry.contrib.customchecks") + +// We cannot use "--release" javac option here because that will forbid exporting com.sun.tools package. +// We also can't seem to use the toolchain without the "--release" option. So disable everything. + +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + toolchain { + languageVersion.set(null as JavaLanguageVersion?) + } +} + +tasks { + withType().configureEach { + with(options) { + release.set(null as Int?) + + compilerArgs.addAll( + listOf( + "--add-exports", + "jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", + "--add-exports", + "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", + "--add-exports", + "jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED", + "--add-exports", + "jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", + "--add-exports", + "jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED", + ), + ) + } + } + + // only test on java 21+ + val testJavaVersion: String? by project + if (testJavaVersion != null && Integer.valueOf(testJavaVersion) < 21) { + test { + enabled = false + } + } +} + +tasks.withType().configureEach { + // required when accessing javac internals + jvmArgs("--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED") + jvmArgs("--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED") + jvmArgs("--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED") + jvmArgs("--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED") + jvmArgs("--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED") + jvmArgs("--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED") + jvmArgs("--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED") + jvmArgs("--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED") + jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") +} + +tasks.withType().configureEach { + // using com.sun.tools.javac.api.JavacTrees breaks javadoc generation + enabled = false +} + +// Our conventions apply this project as a dependency in the errorprone configuration, which would cause +// a circular dependency if trying to compile this project with that still there. So we filter this +// project out. +configurations { + named("errorprone") { + dependencies.removeIf { + it is ProjectDependency && it.name == project.name + } + } +} + +// Skip OWASP dependencyCheck task on test module +dependencyCheck { + skip = true +} diff --git a/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java b/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java new file mode 100644 index 000000000..3489fc851 --- /dev/null +++ b/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java @@ -0,0 +1,189 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.gradle.customchecks; + +import static com.google.errorprone.BugPattern.LinkType.NONE; +import static com.google.errorprone.BugPattern.SeverityLevel.ERROR; + +import com.google.errorprone.BugPattern; +import com.google.errorprone.VisitorState; +import com.google.errorprone.bugpatterns.BugChecker; +import com.google.errorprone.matchers.Description; +import com.google.errorprone.util.ASTHelpers; +import com.sun.source.tree.IdentifierTree; +import com.sun.source.tree.ImportTree; +import com.sun.source.tree.MemberReferenceTree; +import com.sun.source.tree.MemberSelectTree; +import com.sun.source.tree.MethodInvocationTree; +import com.sun.source.tree.NewClassTree; +import com.sun.source.tree.Tree; +import com.sun.tools.javac.code.Symbol; +import javax.annotation.Nullable; + +/** + * Error Prone check that detects usage of deprecated APIs. + * + *

This is similar to javac's -Xlint:deprecation but properly honors {@code @SuppressWarnings} + * (including on import statements, which javac doesn't support with --release 8 due to JDK-8032211). + * + *

Can be suppressed with {@code @SuppressWarnings("deprecation")}. + */ +@BugPattern( + summary = "Use of deprecated API", + severity = ERROR, + linkType = NONE, + altNames = "deprecation", // so it can be suppressed with @SuppressWarnings("deprecation") + suppressionAnnotations = SuppressWarnings.class) +public class OtelDeprecatedApiUsage extends BugChecker + implements BugChecker.MethodInvocationTreeMatcher, + BugChecker.NewClassTreeMatcher, + BugChecker.MemberSelectTreeMatcher, + BugChecker.MemberReferenceTreeMatcher, + BugChecker.IdentifierTreeMatcher { + + private static final long serialVersionUID = 1L; + + @Override + public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState state) { + Symbol sym = ASTHelpers.getSymbol(tree); + return checkDeprecated(sym, tree, state); + } + + @Override + public Description matchNewClass(NewClassTree tree, VisitorState state) { + Symbol sym = ASTHelpers.getSymbol(tree); + return checkDeprecated(sym, tree, state); + } + + @Override + public Description matchMemberSelect(MemberSelectTree tree, VisitorState state) { + Symbol sym = ASTHelpers.getSymbol(tree); + return checkDeprecated(sym, tree, state); + } + + @Override + public Description matchMemberReference(MemberReferenceTree tree, VisitorState state) { + Symbol sym = ASTHelpers.getSymbol(tree); + return checkDeprecated(sym, tree, state); + } + + @Override + public Description matchIdentifier(IdentifierTree tree, VisitorState state) { + Symbol sym = ASTHelpers.getSymbol(tree); + return checkDeprecated(sym, tree, state); + } + + private Description checkDeprecated(Symbol sym, Tree tree, VisitorState state) { + if (sym == null) { + return Description.NO_MATCH; + } + + // Don't warn on import statements + if (isInsideImport(state)) { + return Description.NO_MATCH; + } + + // Check if the symbol itself is deprecated + if (!isDeprecated(sym, state)) { + return Description.NO_MATCH; + } + + // Don't warn if we're inside a deprecated context (class, method, etc.) + if (isInsideDeprecatedCode(state)) { + return Description.NO_MATCH; + } + + // Don't warn if the deprecated symbol is in the same top-level class (matches javac behavior) + if (isInSameTopLevelClass(sym, state)) { + return Description.NO_MATCH; + } + + return buildDescription(tree).setMessage("Use of deprecated API: " + sym).build(); + } + + private static boolean isInsideImport(VisitorState state) { + for (Tree tree : state.getPath()) { + if (tree instanceof ImportTree) { + return true; + } + } + return false; + } + + private static boolean isDeprecated(Symbol sym, VisitorState state) { + // First try the symbol's isDeprecated() method + if (sym.isDeprecated()) { + return true; + } + // Also check for @Deprecated annotation (some symbols may not have flag set) + return ASTHelpers.hasAnnotation(sym, "java.lang.Deprecated", state); + } + + private static boolean isInsideDeprecatedCode(VisitorState state) { + // Check enclosing elements (method, class) for @Deprecated + // Skip the first element which is the current node being checked + boolean first = true; + for (Tree tree : state.getPath()) { + if (first) { + first = false; + continue; + } + Symbol sym = ASTHelpers.getSymbol(tree); + if (sym != null && isDeprecated(sym, state)) { + return true; + } + } + return false; + } + + private static boolean isInSameTopLevelClass(Symbol sym, VisitorState state) { + // Get the top-level class containing the deprecated symbol + Symbol.ClassSymbol deprecatedTopLevel = getTopLevelClass(sym); + if (deprecatedTopLevel == null) { + return false; + } + + // Get the top-level class containing the current usage by walking the tree path + // Skip the first element (the node being checked) to find the enclosing class + Symbol.ClassSymbol usageTopLevel = null; + boolean first = true; + for (Tree tree : state.getPath()) { + if (first) { + first = false; + continue; + } + Symbol treeSym = ASTHelpers.getSymbol(tree); + if (treeSym instanceof Symbol.ClassSymbol classSymbol) { + usageTopLevel = getTopLevelClass(classSymbol); + if (usageTopLevel != null) { + break; + } + } + } + if (usageTopLevel == null) { + return false; + } + + return deprecatedTopLevel.equals(usageTopLevel); + } + + @Nullable + private static Symbol.ClassSymbol getTopLevelClass(Symbol sym) { + Symbol current = sym; + while (current != null) { + if (current instanceof Symbol.ClassSymbol classSymbol) { + Symbol owner = classSymbol.owner; + // Top-level class is owned by a package + if (owner instanceof Symbol.PackageSymbol) { + return classSymbol; + } + } + current = current.owner; + } + return null; + } +} diff --git a/custom-checks/src/main/resources/META-INF/services/com.google.errorprone.bugpatterns.BugChecker b/custom-checks/src/main/resources/META-INF/services/com.google.errorprone.bugpatterns.BugChecker new file mode 100644 index 000000000..2be0deb80 --- /dev/null +++ b/custom-checks/src/main/resources/META-INF/services/com.google.errorprone.bugpatterns.BugChecker @@ -0,0 +1 @@ +io.opentelemetry.gradle.customchecks.OtelDeprecatedApiUsage diff --git a/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java b/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java new file mode 100644 index 000000000..4a98e0a0f --- /dev/null +++ b/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java @@ -0,0 +1,191 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.gradle.customchecks; + +import com.google.errorprone.CompilationTestHelper; +import org.junit.jupiter.api.Test; + +class OtelDeprecatedApiUsageTest { + + @Test + void positiveCases() { + CompilationTestHelper.newInstance( + OtelDeprecatedApiUsage.class, OtelDeprecatedApiUsageTest.class) + .addSourceLines( + "DeprecatedClass.java", + "package test;", + "@Deprecated", + "public class DeprecatedClass {", + " @Deprecated", + " public static void deprecatedMethod() {}", + " @Deprecated", + " public static String DEPRECATED_FIELD = \"old\";", + "}") + .addSourceLines( + "PositiveCases.java", + "package test;", + "public class PositiveCases {", + " void method() {", + " // BUG: Diagnostic contains: Use of deprecated API: deprecatedMethod()", + " DeprecatedClass.deprecatedMethod();", + " // BUG: Diagnostic contains: Use of deprecated API: DEPRECATED_FIELD", + " String s = DeprecatedClass.DEPRECATED_FIELD;", + " }", + "}") + .doTest(); + } + + @Test + void positiveCases_classAsFieldType() { + CompilationTestHelper.newInstance( + OtelDeprecatedApiUsage.class, OtelDeprecatedApiUsageTest.class) + .addSourceLines( + "DeprecatedClass.java", + "package test;", + "@Deprecated", + "public class DeprecatedClass {}") + .addSourceLines( + "PositiveCases.java", + "package test;", + "public class PositiveCases {", + " // BUG: Diagnostic contains: Use of deprecated API: test.DeprecatedClass", + " DeprecatedClass obj;", + "}") + .doTest(); + } + + @Test + void negativeCases_suppressWarningsDeprecation() { + CompilationTestHelper.newInstance( + OtelDeprecatedApiUsage.class, OtelDeprecatedApiUsageTest.class) + .addSourceLines( + "DeprecatedClass.java", + "package test;", + "@Deprecated", + "public class DeprecatedClass {", + " @Deprecated", + " public static void deprecatedMethod() {}", + "}") + .addSourceLines( + "NegativeCases.java", + "package test;", + "@SuppressWarnings(\"deprecation\")", + "public class NegativeCases {", + " DeprecatedClass obj;", + " void method() {", + " DeprecatedClass.deprecatedMethod();", + " }", + "}") + .doTest(); + } + + @Test + void negativeCases_suppressWarningsCheckName() { + CompilationTestHelper.newInstance( + OtelDeprecatedApiUsage.class, OtelDeprecatedApiUsageTest.class) + .addSourceLines( + "DeprecatedClass.java", + "package test;", + "@Deprecated", + "public class DeprecatedClass {}") + .addSourceLines( + "NegativeCases.java", + "package test;", + "@SuppressWarnings(\"OtelDeprecatedApiUsage\")", + "public class NegativeCases {", + " DeprecatedClass obj;", + "}") + .doTest(); + } + + @Test + void negativeCases_insideDeprecatedClass() { + CompilationTestHelper.newInstance( + OtelDeprecatedApiUsage.class, OtelDeprecatedApiUsageTest.class) + .addSourceLines( + "DeprecatedClass.java", + "package test;", + "@Deprecated", + "public class DeprecatedClass {", + " @Deprecated", + " public static void deprecatedMethod() {}", + "}") + .addSourceLines( + "NegativeCases.java", + "package test;", + "@Deprecated", + "public class NegativeCases {", + " // Inside a deprecated class, using other deprecated APIs is fine", + " DeprecatedClass obj;", + " void method() {", + " DeprecatedClass.deprecatedMethod();", + " }", + "}") + .doTest(); + } + + @Test + void negativeCases_sameClassDeprecation() { + // Matches javac behavior: using deprecated members within the same class doesn't warn + CompilationTestHelper.newInstance( + OtelDeprecatedApiUsage.class, OtelDeprecatedApiUsageTest.class) + .addSourceLines( + "SameClass.java", + "package test;", + "public class SameClass {", + " @Deprecated", + " public SameClass() {}", + " public static SameClass create() {", + " // No warning: deprecated constructor is in same class", + " return new SameClass();", + " }", + " @Deprecated", + " public static void deprecatedMethod() {}", + " public void caller() {", + " // No warning: deprecated method is in same class", + " deprecatedMethod();", + " }", + "}") + .doTest(); + } + + @Test + void negativeCases_importDeprecatedClass() { + CompilationTestHelper.newInstance( + OtelDeprecatedApiUsage.class, OtelDeprecatedApiUsageTest.class) + .addSourceLines( + "deprecated/DeprecatedClass.java", + "package deprecated;", + "@Deprecated", + "public class DeprecatedClass {}") + .addSourceLines( + "NegativeCases.java", + "package test;", + "import deprecated.DeprecatedClass;", // Should NOT warn on import + "@SuppressWarnings(\"deprecation\")", + "public class NegativeCases {", + " void method(DeprecatedClass obj) {}", + "}") + .doTest(); + } + + @Test + void positiveCases_externalDeprecatedApi() { + // Verify the check detects deprecated APIs from external code (JDK in this case) + CompilationTestHelper.newInstance( + OtelDeprecatedApiUsage.class, OtelDeprecatedApiUsageTest.class) + .addSourceLines( + "ExternalDeprecated.java", + "package test;", + "public class ExternalDeprecated {", + " void method(Thread t) {", + " // BUG: Diagnostic contains: Use of deprecated API", + " t.stop();", + " }", + "}") + .doTest(); + } +} diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 07e5f85f1..d5fedba3c 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -29,6 +29,7 @@ dependencies { api("com.google.auto.value:auto-value-annotations:1.11.1") api("com.google.errorprone:error_prone_annotations:2.47.0") api("com.google.errorprone:error_prone_core:2.47.0") + api("com.google.errorprone:error_prone_test_helpers:2.47.0") api("io.github.netmikey.logunit:logunit-jul:2.0.0") api("io.opentelemetry.proto:opentelemetry-proto:1.9.0-alpha") api("io.prometheus:simpleclient:0.16.0") diff --git a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/logs/models/LogRecordDataImpl.java b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/logs/models/LogRecordDataImpl.java index 224c76e87..3b3682b44 100644 --- a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/logs/models/LogRecordDataImpl.java +++ b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/logs/models/LogRecordDataImpl.java @@ -12,6 +12,7 @@ import io.opentelemetry.api.logs.Severity; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.logs.data.Body; import io.opentelemetry.sdk.logs.data.internal.ExtendedLogRecordData; import io.opentelemetry.sdk.resources.Resource; import javax.annotation.Nullable; @@ -24,11 +25,9 @@ public static Builder builder() { } @Deprecated - public io.opentelemetry.sdk.logs.data.Body getBody() { + public Body getBody() { Value valueBody = getBodyValue(); - return valueBody == null - ? io.opentelemetry.sdk.logs.data.Body.empty() - : io.opentelemetry.sdk.logs.data.Body.string(valueBody.asString()); + return valueBody == null ? Body.empty() : Body.string(valueBody.asString()); } @Override diff --git a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/spans/models/SpanDataImpl.java b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/spans/models/SpanDataImpl.java index dedd08ca5..100531c3d 100644 --- a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/spans/models/SpanDataImpl.java +++ b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/spans/models/SpanDataImpl.java @@ -9,6 +9,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.trace.data.EventData; @@ -32,7 +33,7 @@ public boolean hasEnded() { @SuppressWarnings( "deprecation") // Overridden to avoid AutoValue to generate builder method for it. @Override - public io.opentelemetry.sdk.common.InstrumentationLibraryInfo getInstrumentationLibraryInfo() { + public InstrumentationLibraryInfo getInstrumentationLibraryInfo() { throw new UnsupportedOperationException(); } diff --git a/gcp-auth-extension/src/test/java/io/opentelemetry/contrib/gcp/auth/GcpAuthExtensionEndToEndTest.java b/gcp-auth-extension/src/test/java/io/opentelemetry/contrib/gcp/auth/GcpAuthExtensionEndToEndTest.java index f87762474..35be22fa4 100644 --- a/gcp-auth-extension/src/test/java/io/opentelemetry/contrib/gcp/auth/GcpAuthExtensionEndToEndTest.java +++ b/gcp-auth-extension/src/test/java/io/opentelemetry/contrib/gcp/auth/GcpAuthExtensionEndToEndTest.java @@ -22,6 +22,7 @@ import java.net.URI; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; import java.security.cert.X509Certificate; import java.time.Duration; import java.util.Arrays; @@ -152,7 +153,7 @@ public X509Certificate[] getAcceptedIssuers() { } }; SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, new java.security.SecureRandom()); + sc.init(null, trustAllCerts, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } diff --git a/ibm-mq-metrics/src/integrationTest/java/io/opentelemetry/ibm/mq/integration/tests/JakartaPutGet.java b/ibm-mq-metrics/src/integrationTest/java/io/opentelemetry/ibm/mq/integration/tests/JakartaPutGet.java index ef40efa44..0a099df50 100644 --- a/ibm-mq-metrics/src/integrationTest/java/io/opentelemetry/ibm/mq/integration/tests/JakartaPutGet.java +++ b/ibm-mq-metrics/src/integrationTest/java/io/opentelemetry/ibm/mq/integration/tests/JakartaPutGet.java @@ -53,7 +53,7 @@ public static void createQueue(QueueManager manager, String name, int maxDepth) MQQueueManager ibmQueueManager = WmqUtil.connectToQueueManager(manager); PCFMessageAgent agent = WmqUtil.initPcfMessageAgent(manager, ibmQueueManager); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_CREATE_Q); - request.addParameter(com.ibm.mq.constants.CMQC.MQCA_Q_NAME, name); + request.addParameter(CMQC.MQCA_Q_NAME, name); request.addParameter(CMQC.MQIA_Q_TYPE, CMQC.MQQT_LOCAL); request.addParameter(CMQC.MQIA_MAX_Q_DEPTH, maxDepth); diff --git a/maven-extension/src/main/java/io/opentelemetry/maven/OtelExecutionListener.java b/maven-extension/src/main/java/io/opentelemetry/maven/OtelExecutionListener.java index 830412f7f..9da925a4c 100644 --- a/maven-extension/src/main/java/io/opentelemetry/maven/OtelExecutionListener.java +++ b/maven-extension/src/main/java/io/opentelemetry/maven/OtelExecutionListener.java @@ -98,14 +98,11 @@ public final class OtelExecutionListener extends AbstractExecutionListener { public void sessionStarted(ExecutionEvent executionEvent) { MavenProject project = executionEvent.getSession().getTopLevelProject(); TextMapGetter> toUpperCaseTextMapGetter = new ToUpperCaseTextMapGetter(); - io.opentelemetry.context.Context context = + Context context = openTelemetrySdkService .getPropagators() .getTextMapPropagator() - .extract( - io.opentelemetry.context.Context.current(), - System.getenv(), - toUpperCaseTextMapGetter); + .extract(Context.current(), System.getenv(), toUpperCaseTextMapGetter); // TODO question: is this the root span name we want? // It's interesting for the root span name to diff --git a/maven-extension/src/main/java/io/opentelemetry/maven/handler/MavenDeployHandler.java b/maven-extension/src/main/java/io/opentelemetry/maven/handler/MavenDeployHandler.java index b9e889cda..d2197f3cd 100644 --- a/maven-extension/src/main/java/io/opentelemetry/maven/handler/MavenDeployHandler.java +++ b/maven-extension/src/main/java/io/opentelemetry/maven/handler/MavenDeployHandler.java @@ -16,6 +16,7 @@ import java.util.Collections; import java.util.List; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.execution.ExecutionEvent; import org.apache.maven.project.MavenProject; import org.slf4j.Logger; @@ -35,8 +36,7 @@ public void enrichSpan(SpanBuilder spanBuilder, ExecutionEvent execution) { MavenProject project = execution.getProject(); @SuppressWarnings("deprecation") // there is no alternative to o.a.m.a.r.ArtifactRepository - org.apache.maven.artifact.repository.ArtifactRepository optRepository = - project.getDistributionManagementArtifactRepository(); + ArtifactRepository optRepository = project.getDistributionManagementArtifactRepository(); if (optRepository == null) { return; diff --git a/opamp-client/src/main/java/io/opentelemetry/opamp/client/internal/connectivity/http/OkHttpSender.java b/opamp-client/src/main/java/io/opentelemetry/opamp/client/internal/connectivity/http/OkHttpSender.java index 1add016fd..fd45984de 100644 --- a/opamp-client/src/main/java/io/opentelemetry/opamp/client/internal/connectivity/http/OkHttpSender.java +++ b/opamp-client/src/main/java/io/opentelemetry/opamp/client/internal/connectivity/http/OkHttpSender.java @@ -41,7 +41,7 @@ private OkHttpSender(String url, OkHttpClient client) { @Override public CompletableFuture send(BodyWriter writer, int contentLength) { CompletableFuture future = new CompletableFuture<>(); - okhttp3.Request.Builder builder = new okhttp3.Request.Builder().url(url); + Request.Builder builder = new Request.Builder().url(url); builder.addHeader("Content-Type", CONTENT_TYPE); RequestBody body = new RawRequestBody(writer, contentLength, MEDIA_TYPE); diff --git a/opamp-client/src/main/java/io/opentelemetry/opamp/client/internal/connectivity/websocket/OkHttpWebSocket.java b/opamp-client/src/main/java/io/opentelemetry/opamp/client/internal/connectivity/websocket/OkHttpWebSocket.java index 8ff386251..91eaf57bc 100644 --- a/opamp-client/src/main/java/io/opentelemetry/opamp/client/internal/connectivity/websocket/OkHttpWebSocket.java +++ b/opamp-client/src/main/java/io/opentelemetry/opamp/client/internal/connectivity/websocket/OkHttpWebSocket.java @@ -11,6 +11,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import okhttp3.OkHttpClient; +import okhttp3.Request; import okhttp3.Response; import okhttp3.WebSocketListener; import okio.ByteString; @@ -37,7 +38,7 @@ private OkHttpWebSocket(String url, OkHttpClient client) { @Override public void open(Listener listener) { if (status.compareAndSet(Status.NOT_RUNNING, Status.STARTING)) { - okhttp3.Request request = new okhttp3.Request.Builder().url(url).build(); + Request request = new Request.Builder().url(url).build(); webSocket.set(client.newWebSocket(request, new ListenerAdapter(listener))); } } diff --git a/processors/src/test/java/io/opentelemetry/contrib/interceptor/InterceptableLogRecordExporterTest.java b/processors/src/test/java/io/opentelemetry/contrib/interceptor/InterceptableLogRecordExporterTest.java index 0096caa66..29347882a 100644 --- a/processors/src/test/java/io/opentelemetry/contrib/interceptor/InterceptableLogRecordExporterTest.java +++ b/processors/src/test/java/io/opentelemetry/contrib/interceptor/InterceptableLogRecordExporterTest.java @@ -17,6 +17,7 @@ import io.opentelemetry.contrib.interceptor.common.ComposableInterceptor; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.SdkLoggerProvider; +import io.opentelemetry.sdk.logs.data.Body; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor; import io.opentelemetry.sdk.resources.Resource; @@ -138,7 +139,7 @@ public String getSeverityText() { @Override @SuppressWarnings("deprecation") // implement deprecated method - public io.opentelemetry.sdk.logs.data.Body getBody() { + public Body getBody() { return delegate.getBody(); } diff --git a/prometheus-client-bridge/src/main/java/io/opentelemetry/contrib/metrics/prometheus/clientbridge/MetricAdapter.java b/prometheus-client-bridge/src/main/java/io/opentelemetry/contrib/metrics/prometheus/clientbridge/MetricAdapter.java index e71331964..549b0321b 100644 --- a/prometheus-client-bridge/src/main/java/io/opentelemetry/contrib/metrics/prometheus/clientbridge/MetricAdapter.java +++ b/prometheus-client-bridge/src/main/java/io/opentelemetry/contrib/metrics/prometheus/clientbridge/MetricAdapter.java @@ -27,6 +27,7 @@ import io.prometheus.client.Collector; import io.prometheus.client.Collector.MetricFamilySamples; import io.prometheus.client.Collector.MetricFamilySamples.Sample; +import io.prometheus.client.exemplars.Exemplar; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -303,11 +304,10 @@ private static Sample createSample( MILLISECONDS.convert(timestampNanos, NANOSECONDS)); } - private static io.prometheus.client.exemplars.Exemplar toPrometheusExemplar( - ExemplarData exemplar) { + private static Exemplar toPrometheusExemplar(ExemplarData exemplar) { SpanContext spanContext = exemplar.getSpanContext(); if (spanContext.isValid()) { - return new io.prometheus.client.exemplars.Exemplar( + return new Exemplar( getExemplarValue(exemplar), // Convert to ms for prometheus, truncate nanosecond precision. NANOSECONDS.toMillis(exemplar.getEpochNanos()), @@ -316,7 +316,7 @@ private static io.prometheus.client.exemplars.Exemplar toPrometheusExemplar( "span_id", spanContext.getSpanId()); } - return new io.prometheus.client.exemplars.Exemplar(getExemplarValue(exemplar)); + return new Exemplar(getExemplarValue(exemplar)); } private static double getExemplarValue(ExemplarData exemplar) { diff --git a/prometheus-client-bridge/src/test/java/io/opentelemetry/contrib/metrics/prometheus/clientbridge/MetricAdapterTest.java b/prometheus-client-bridge/src/test/java/io/opentelemetry/contrib/metrics/prometheus/clientbridge/MetricAdapterTest.java index 7e5b064d6..5d5ddeb22 100644 --- a/prometheus-client-bridge/src/test/java/io/opentelemetry/contrib/metrics/prometheus/clientbridge/MetricAdapterTest.java +++ b/prometheus-client-bridge/src/test/java/io/opentelemetry/contrib/metrics/prometheus/clientbridge/MetricAdapterTest.java @@ -39,6 +39,7 @@ import java.io.UncheckedIOException; import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.assertj.core.presentation.StandardRepresentation; @@ -537,7 +538,7 @@ void toSamples_HistogramPoints() { MetricAdapter.toSamples("full_name", MetricDataType.HISTOGRAM, Collections.emptyList())) .isEmpty(); - java.util.List result = + List result = MetricAdapter.toSamples( "full_name", MetricDataType.HISTOGRAM, diff --git a/settings.gradle.kts b/settings.gradle.kts index 324b8ddeb..e05c58264 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -73,6 +73,7 @@ include(":cel-sampler") include(":compressors:compressor-zstd") include(":cloudfoundry-resources") include(":consistent-sampling") +include(":custom-checks") include(":dependencyManagement") include(":disk-buffering") include(":ibm-mq-metrics")