From 6650d13060a6593410912ce8135273ae3b623a4c Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 7 Feb 2026 14:21:41 -0800 Subject: [PATCH 1/6] Replace Xlint deprecation check with custom errorprone check --- .../common/ArrayBackedExtendedAttributes.java | 2 +- .../ArrayBackedExtendedAttributesBuilder.java | 2 +- .../kotlin/otel.java-conventions.gradle.kts | 4 + .../customchecks/OtelDeprecatedApiUsage.java | 187 ++++++++++++++++++ ...m.google.errorprone.bugpatterns.BugChecker | 1 + .../OtelDeprecatedApiUsageTest.java | 154 +++++++++++++++ 6 files changed, 348 insertions(+), 2 deletions(-) create mode 100644 custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java create mode 100644 custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributes.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributes.java index fed39323f98..761748ce206 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributes.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributes.java @@ -119,7 +119,7 @@ private Value getAsValue(String keyName) { return null; } - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "deprecation"}) // deprecation: EXTENDED_ATTRIBUTES @Nullable private static Value asValue(ExtendedAttributeType type, Object value) { switch (type) { diff --git a/api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributesBuilder.java b/api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributesBuilder.java index ec2d4454236..cbdac5429ef 100644 --- a/api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributesBuilder.java +++ b/api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributesBuilder.java @@ -56,7 +56,7 @@ public ExtendedAttributesBuilder put(ExtendedAttributeKey key, T value) { return this; } - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "deprecation"}) // deprecation: EXTENDED_ATTRIBUTES private void putValue(ExtendedAttributeKey key, Value valueObj) { // Convert VALUE type to narrower type when possible String keyName = key.getKey(); diff --git a/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts index 05dc362f324..4bc8e127202 100644 --- a/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts @@ -91,6 +91,10 @@ tasks { "-Xlint:-options", "-Xlint:-serial", "-Xlint:-this-escape", + // 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 Error Prone's OtelDeprecatedApiUsage check instead, which honors @SuppressWarnings. + "-Xlint:-deprecation", // Fail build on any warning "-Werror", ), 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 00000000000..45eed6cb1df --- /dev/null +++ b/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java @@ -0,0 +1,187 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.gradle.customchecks; + +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, + 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 index e73ad8bbe73..3440c60a31c 100644 --- 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 @@ -1,2 +1,3 @@ +io.opentelemetry.gradle.customchecks.OtelDeprecatedApiUsage io.opentelemetry.gradle.customchecks.OtelInternalJavadoc io.opentelemetry.gradle.customchecks.OtelPrivateConstructorForUtilityClass 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 00000000000..aaa8ea4d377 --- /dev/null +++ b/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java @@ -0,0 +1,154 @@ +/* + * 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 method", + " DeprecatedClass.deprecatedMethod();", + " // BUG: Diagnostic contains: Use of 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 class", + " 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(); + } +} From 34e1340bf3cc8672448b8ef4f053b001268ee925 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 7 Feb 2026 14:57:24 -0800 Subject: [PATCH 2/6] Replace FQCNs with imports --- .../OtelDeprecatedApiUsageTest.java | 17 ++++++++++++ .../internal/ZipkinSpanExporterProvider.java | 5 ++-- .../ZipkinSpanExporterProviderTest.java | 4 +-- .../PropagatorContextExtractBenchmark.java | 26 +++++++++---------- .../PropagatorContextInjectBenchmark.java | 3 +-- .../JaegerConfigurablePropagator.java | 7 +++-- .../propagation/JaegerPropagatorTest.java | 19 +++++--------- .../ConfigurableSpanExporterTest.java | 7 +++-- .../sdk/autoconfigure/FullConfigTest.java | 8 +++--- .../SpanExporterConfigurationTest.java | 3 ++- .../internal/InstrumentationScopeUtil.java | 9 ++++--- .../InstrumentationLibraryInfoTest.java | 10 +++---- .../InstrumentationScopeUtilTest.java | 13 ++++------ .../sdk/logs/ExtendedSdkLogRecordData.java | 7 +++-- .../sdk/logs/SdkLogRecordData.java | 7 +++-- .../sdk/testing/logs/TestLogRecordData.java | 13 +++++----- .../internal/TestExtendedLogRecordData.java | 13 +++++----- 17 files changed, 86 insertions(+), 85 deletions(-) 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 index aaa8ea4d377..edb877434ec 100644 --- a/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java +++ b/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java @@ -151,4 +151,21 @@ void negativeCases_sameClassDeprecation() { "}") .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/exporters/zipkin/src/main/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProvider.java b/exporters/zipkin/src/main/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProvider.java index f73446e6e40..fc5e0ab64a2 100644 --- a/exporters/zipkin/src/main/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProvider.java +++ b/exporters/zipkin/src/main/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProvider.java @@ -5,6 +5,8 @@ package io.opentelemetry.exporter.zipkin.internal; +import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter; +import io.opentelemetry.exporter.zipkin.ZipkinSpanExporterBuilder; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider; import io.opentelemetry.sdk.trace.export.SpanExporter; @@ -26,8 +28,7 @@ public String getName() { @Override public SpanExporter createExporter(ConfigProperties config) { - io.opentelemetry.exporter.zipkin.ZipkinSpanExporterBuilder builder = - io.opentelemetry.exporter.zipkin.ZipkinSpanExporter.builder(); + ZipkinSpanExporterBuilder builder = ZipkinSpanExporter.builder(); String endpoint = config.getString("otel.exporter.zipkin.endpoint"); if (endpoint != null) { diff --git a/exporters/zipkin/src/test/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProviderTest.java b/exporters/zipkin/src/test/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProviderTest.java index 814d2d967fc..5738e071d47 100644 --- a/exporters/zipkin/src/test/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProviderTest.java +++ b/exporters/zipkin/src/test/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProviderTest.java @@ -7,6 +7,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.trace.export.SpanExporter; import java.util.Collections; @@ -28,8 +29,7 @@ void getName() { void createExporter_Default() { try (SpanExporter spanExporter = provider.createExporter(DefaultConfigProperties.createFromMap(Collections.emptyMap()))) { - assertThat(spanExporter) - .isInstanceOf(io.opentelemetry.exporter.zipkin.ZipkinSpanExporter.class); + assertThat(spanExporter).isInstanceOf(ZipkinSpanExporter.class); assertThat(spanExporter) .extracting("sender") .extracting("delegate") diff --git a/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextExtractBenchmark.java b/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextExtractBenchmark.java index 13b01058578..a4cc4cd628f 100644 --- a/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextExtractBenchmark.java +++ b/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextExtractBenchmark.java @@ -78,19 +78,19 @@ public static class JaegerContextExtractBenchmark extends AbstractContextExtract private static final List> traceHeaders = Arrays.asList( Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "905734c59b913b4a905734c59b913b4a:9909983295041501:0:1"), Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "21196a77f299580e21196a77f299580e:993a97ee3691eb26:0:0"), Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "2e7d0ad2390617702e7d0ad239061770:d49582a2de984b86:0:1"), Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "905734c59b913b4a905734c59b913b4a:776ff807b787538a:0:0"), Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "68ec932c33b3f2ee68ec932c33b3f2ee:68ec932c33b3f2ee:0:0")); private final TextMapGetter> getter = @@ -106,8 +106,7 @@ public String get(Map carrier, String key) { } }; - private final io.opentelemetry.extension.trace.propagation.JaegerPropagator jaegerPropagator = - io.opentelemetry.extension.trace.propagation.JaegerPropagator.getInstance(); + private final JaegerPropagator jaegerPropagator = JaegerPropagator.getInstance(); @Override protected Context doExtract() { @@ -128,19 +127,19 @@ public static class JaegerUrlEncodedContextExtractBenchmark private static final List> traceHeaders = Arrays.asList( Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "905734c59b913b4a905734c59b913b4a%3A9909983295041501%3A0%3A1"), Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "21196a77f299580e21196a77f299580e%3A993a97ee3691eb26%3A0%3A0"), Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "2e7d0ad2390617702e7d0ad239061770%3Ad49582a2de984b86%3A0%3A1"), Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "905734c59b913b4a905734c59b913b4a%3A776ff807b787538a%3A0%3A0"), Collections.singletonMap( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER, + JaegerPropagator.PROPAGATION_HEADER, "68ec932c33b3f2ee68ec932c33b3f2ee%3A68ec932c33b3f2ee%3A0%3A0")); private final TextMapGetter> getter = @@ -156,8 +155,7 @@ public String get(Map carrier, String key) { } }; - private final io.opentelemetry.extension.trace.propagation.JaegerPropagator jaegerPropagator = - io.opentelemetry.extension.trace.propagation.JaegerPropagator.getInstance(); + private final JaegerPropagator jaegerPropagator = JaegerPropagator.getInstance(); @Override protected Context doExtract() { diff --git a/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextInjectBenchmark.java b/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextInjectBenchmark.java index 123e0d2bb31..bf48658b253 100644 --- a/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextInjectBenchmark.java +++ b/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextInjectBenchmark.java @@ -82,8 +82,7 @@ private static SpanContext createTestSpanContext(String traceId, String spanId) public static class JaegerContextInjectBenchmark extends AbstractContextInjectBenchmark { @SuppressWarnings("deprecation") - private final io.opentelemetry.extension.trace.propagation.JaegerPropagator jaegerPropagator = - io.opentelemetry.extension.trace.propagation.JaegerPropagator.getInstance(); + private final JaegerPropagator jaegerPropagator = JaegerPropagator.getInstance(); private final TextMapSetter> setter = Map::put; diff --git a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerConfigurablePropagator.java b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerConfigurablePropagator.java index de2aabad21e..46999cb81d1 100644 --- a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerConfigurablePropagator.java +++ b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerConfigurablePropagator.java @@ -10,15 +10,14 @@ import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider; /** - * A {@link ConfigurablePropagatorProvider} which allows enabling the {@link - * io.opentelemetry.extension.trace.propagation.JaegerPropagator} with the propagator name {@code - * jaeger}. + * A {@link ConfigurablePropagatorProvider} which allows enabling the {@link JaegerPropagator} with + * the propagator name {@code jaeger}. */ @SuppressWarnings("deprecation") public final class JaegerConfigurablePropagator implements ConfigurablePropagatorProvider { @Override public TextMapPropagator getPropagator(ConfigProperties config) { - return io.opentelemetry.extension.trace.propagation.JaegerPropagator.getInstance(); + return JaegerPropagator.getInstance(); } @Override diff --git a/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/JaegerPropagatorTest.java b/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/JaegerPropagatorTest.java index a68af6f97c8..2db741b2d57 100644 --- a/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/JaegerPropagatorTest.java +++ b/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/JaegerPropagatorTest.java @@ -30,20 +30,16 @@ import javax.annotation.Nullable; import org.junit.jupiter.api.Test; -/** Unit tests for {@link io.opentelemetry.extension.trace.propagation.JaegerPropagator}. */ +/** Unit tests for {@link JaegerPropagator}. */ @SuppressWarnings("deprecation") class JaegerPropagatorTest { - private static final String BAGGAGE_HEADER = - io.opentelemetry.extension.trace.propagation.JaegerPropagator.BAGGAGE_HEADER; - private static final String BAGGAGE_PREFIX = - io.opentelemetry.extension.trace.propagation.JaegerPropagator.BAGGAGE_PREFIX; - private static final char DEPRECATED_PARENT_SPAN = - io.opentelemetry.extension.trace.propagation.JaegerPropagator.DEPRECATED_PARENT_SPAN; - private static final String PROPAGATION_HEADER = - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER; + private static final String BAGGAGE_HEADER = JaegerPropagator.BAGGAGE_HEADER; + private static final String BAGGAGE_PREFIX = JaegerPropagator.BAGGAGE_PREFIX; + private static final char DEPRECATED_PARENT_SPAN = JaegerPropagator.DEPRECATED_PARENT_SPAN; + private static final String PROPAGATION_HEADER = JaegerPropagator.PROPAGATION_HEADER; private static final char PROPAGATION_HEADER_DELIMITER = - io.opentelemetry.extension.trace.propagation.JaegerPropagator.PROPAGATION_HEADER_DELIMITER; + JaegerPropagator.PROPAGATION_HEADER_DELIMITER; private static final long TRACE_ID_HI = 77L; private static final long TRACE_ID_LOW = 22L; @@ -69,8 +65,7 @@ public String get(Map carrier, String key) { } }; - private final io.opentelemetry.extension.trace.propagation.JaegerPropagator jaegerPropagator = - io.opentelemetry.extension.trace.propagation.JaegerPropagator.getInstance(); + private final JaegerPropagator jaegerPropagator = JaegerPropagator.getInstance(); private static SpanContext getSpanContext(Context context) { return Span.fromContext(context).getSpanContext(); diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSpanExporterTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSpanExporterTest.java index cce800d494d..53a539a5c37 100644 --- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSpanExporterTest.java +++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSpanExporterTest.java @@ -13,6 +13,7 @@ import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.exporter.otlp.internal.OtlpSpanExporterProvider; import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter; +import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter; import io.opentelemetry.internal.testing.CleanupExtension; import io.opentelemetry.sdk.autoconfigure.internal.NamedSpiManager; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; @@ -170,9 +171,7 @@ void configureSpanProcessors_batchSpanProcessor() { TracerProviderConfiguration.configureSpanProcessors( DefaultConfigProperties.createFromMap( Collections.singletonMap("otel.traces.exporter", exporterName)), - ImmutableMap.of( - exporterName, - io.opentelemetry.exporter.zipkin.ZipkinSpanExporter.builder().build()), + ImmutableMap.of(exporterName, ZipkinSpanExporter.builder().build()), InternalTelemetryVersion.LEGACY, MeterProvider.noop(), closeables); @@ -194,7 +193,7 @@ void configureSpanProcessors_multipleExporters() { "otlp", OtlpGrpcSpanExporter.builder().build(), "zipkin", - io.opentelemetry.exporter.zipkin.ZipkinSpanExporter.builder().build()), + ZipkinSpanExporter.builder().build()), InternalTelemetryVersion.LEGACY, MeterProvider.noop(), closeables); diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java index b1802b4c89c..8514a7b43d4 100644 --- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java +++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java @@ -23,6 +23,8 @@ import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.extension.trace.propagation.B3Propagator; +import io.opentelemetry.extension.trace.propagation.JaegerPropagator; +import io.opentelemetry.extension.trace.propagation.OtTracePropagator; import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse; import io.opentelemetry.proto.collector.logs.v1.LogsServiceGrpc; @@ -176,10 +178,8 @@ void configures() throws Exception { keys.addAll(W3CBaggagePropagator.getInstance().fields()); keys.addAll(B3Propagator.injectingSingleHeader().fields()); keys.addAll(B3Propagator.injectingMultiHeaders().fields()); - keys.addAll( - io.opentelemetry.extension.trace.propagation.JaegerPropagator.getInstance().fields()); - keys.addAll( - io.opentelemetry.extension.trace.propagation.OtTracePropagator.getInstance().fields()); + keys.addAll(JaegerPropagator.getInstance().fields()); + keys.addAll(OtTracePropagator.getInstance().fields()); // Added by TestPropagatorProvider keys.add("test"); assertThat(fields).containsExactlyInAnyOrderElementsOf(keys); diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/SpanExporterConfigurationTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/SpanExporterConfigurationTest.java index 4d94edb48cc..95d014f615c 100644 --- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/SpanExporterConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/SpanExporterConfigurationTest.java @@ -12,6 +12,7 @@ import io.opentelemetry.exporter.logging.LoggingSpanExporter; import io.opentelemetry.exporter.logging.otlp.OtlpJsonLoggingSpanExporter; import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter; +import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter; import io.opentelemetry.sdk.autoconfigure.internal.NamedSpiManager; import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @@ -42,7 +43,7 @@ void configureExporter_KnownSpiExportersOnClasspath() { assertThat(SpanExporterConfiguration.configureExporter("otlp", spiExportersManager)) .isInstanceOf(OtlpGrpcSpanExporter.class); assertThat(SpanExporterConfiguration.configureExporter("zipkin", spiExportersManager)) - .isInstanceOf(io.opentelemetry.exporter.zipkin.ZipkinSpanExporter.class); + .isInstanceOf(ZipkinSpanExporter.class); } @Test diff --git a/sdk/common/src/main/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtil.java b/sdk/common/src/main/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtil.java index 9e2e356aeee..7ee344c38aa 100644 --- a/sdk/common/src/main/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtil.java +++ b/sdk/common/src/main/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtil.java @@ -5,6 +5,7 @@ package io.opentelemetry.sdk.common.internal; +import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.common.InstrumentationScopeInfoBuilder; @@ -14,11 +15,11 @@ */ public final class InstrumentationScopeUtil { - /** Convert to {@link io.opentelemetry.sdk.common.InstrumentationLibraryInfo}. */ + /** Convert to {@link InstrumentationLibraryInfo}. */ @SuppressWarnings("deprecation") // Utility method for compatibility - public static io.opentelemetry.sdk.common.InstrumentationLibraryInfo toInstrumentationLibraryInfo( + public static InstrumentationLibraryInfo toInstrumentationLibraryInfo( InstrumentationScopeInfo instrumentationScopeInfo) { - return io.opentelemetry.sdk.common.InstrumentationLibraryInfo.create( + return InstrumentationLibraryInfo.create( instrumentationScopeInfo.getName(), instrumentationScopeInfo.getVersion(), instrumentationScopeInfo.getSchemaUrl()); @@ -27,7 +28,7 @@ public static io.opentelemetry.sdk.common.InstrumentationLibraryInfo toInstrumen /** Convert to {@link InstrumentationScopeInfo}. */ @SuppressWarnings("deprecation") // Utility method for compatibility public static InstrumentationScopeInfo toInstrumentationScopeInfo( - io.opentelemetry.sdk.common.InstrumentationLibraryInfo instrumentationLibraryInfo) { + InstrumentationLibraryInfo instrumentationLibraryInfo) { InstrumentationScopeInfoBuilder builder = InstrumentationScopeInfo.builder(instrumentationLibraryInfo.getName()); if (instrumentationLibraryInfo.getVersion() != null) { diff --git a/sdk/common/src/test/java/io/opentelemetry/sdk/common/InstrumentationLibraryInfoTest.java b/sdk/common/src/test/java/io/opentelemetry/sdk/common/InstrumentationLibraryInfoTest.java index 48d1b93e384..5a3cffc2251 100644 --- a/sdk/common/src/test/java/io/opentelemetry/sdk/common/InstrumentationLibraryInfoTest.java +++ b/sdk/common/src/test/java/io/opentelemetry/sdk/common/InstrumentationLibraryInfoTest.java @@ -10,21 +10,19 @@ import org.junit.jupiter.api.Test; -/** Tests for {@link io.opentelemetry.sdk.common.InstrumentationLibraryInfo}. */ +/** Tests for {@link InstrumentationLibraryInfo}. */ @SuppressWarnings("deprecation") // Testing deprecated code class InstrumentationLibraryInfoTest { @Test void emptyLibraryInfo() { - assertThat(io.opentelemetry.sdk.common.InstrumentationLibraryInfo.empty().getName()).isEmpty(); - assertThat(io.opentelemetry.sdk.common.InstrumentationLibraryInfo.empty().getVersion()) - .isNull(); + assertThat(InstrumentationLibraryInfo.empty().getName()).isEmpty(); + assertThat(InstrumentationLibraryInfo.empty().getVersion()).isNull(); } @Test void nullName() { - assertThatThrownBy( - () -> io.opentelemetry.sdk.common.InstrumentationLibraryInfo.create(null, "1.0.0")) + assertThatThrownBy(() -> InstrumentationLibraryInfo.create(null, "1.0.0")) .isInstanceOf(NullPointerException.class) .hasMessage("name"); } diff --git a/sdk/common/src/test/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtilTest.java b/sdk/common/src/test/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtilTest.java index a72915b3e1a..0d8d3ba93a7 100644 --- a/sdk/common/src/test/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtilTest.java +++ b/sdk/common/src/test/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtilTest.java @@ -8,6 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.common.InstrumentationLibraryInfo; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import org.junit.jupiter.api.Test; @@ -19,8 +20,7 @@ void toInstrumentationLibraryInfo() { assertThat( InstrumentationScopeUtil.toInstrumentationLibraryInfo( InstrumentationScopeInfo.builder("name").build())) - .isEqualTo( - io.opentelemetry.sdk.common.InstrumentationLibraryInfo.create("name", null, null)); + .isEqualTo(InstrumentationLibraryInfo.create("name", null, null)); assertThat( InstrumentationScopeUtil.toInstrumentationLibraryInfo( InstrumentationScopeInfo.builder("name") @@ -28,21 +28,18 @@ void toInstrumentationLibraryInfo() { .setSchemaUrl("schemaUrl") .setAttributes(Attributes.builder().put("key", "value").build()) .build())) - .isEqualTo( - io.opentelemetry.sdk.common.InstrumentationLibraryInfo.create( - "name", "version", "schemaUrl")); + .isEqualTo(InstrumentationLibraryInfo.create("name", "version", "schemaUrl")); } @Test void toInstrumentationScopeInfo() { assertThat( InstrumentationScopeUtil.toInstrumentationScopeInfo( - io.opentelemetry.sdk.common.InstrumentationLibraryInfo.create("name", null, null))) + InstrumentationLibraryInfo.create("name", null, null))) .isEqualTo(InstrumentationScopeInfo.builder("name").build()); assertThat( InstrumentationScopeUtil.toInstrumentationScopeInfo( - io.opentelemetry.sdk.common.InstrumentationLibraryInfo.create( - "name", "version", "schemaUrl"))) + InstrumentationLibraryInfo.create("name", "version", "schemaUrl"))) .isEqualTo( InstrumentationScopeInfo.builder("name") .setVersion("version") diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordData.java index 14f1e9a3985..2daa873793e 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordData.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordData.java @@ -11,6 +11,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; @@ -59,10 +60,8 @@ static ExtendedSdkLogRecordData create( @Override @SuppressWarnings("deprecation") // Implementation of deprecated method - 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()); } } diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordData.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordData.java index 5fa5b156058..3f0e4f72af4 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordData.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordData.java @@ -11,6 +11,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.LogRecordData; import io.opentelemetry.sdk.resources.Resource; import javax.annotation.Nullable; @@ -59,10 +60,8 @@ static SdkLogRecordData create( @Override @SuppressWarnings("deprecation") // Implementation of deprecated method - 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()); } } diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java index bd224e67ff7..7d9c6d8beb4 100644 --- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java +++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java @@ -11,6 +11,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.LogRecordData; import io.opentelemetry.sdk.resources.Resource; import java.time.Instant; @@ -44,11 +45,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()); } /** @@ -156,10 +155,10 @@ public Builder setBody(String body) { * @deprecated Use {@link #setBodyValue(Value)}. */ @Deprecated - public Builder setBody(io.opentelemetry.sdk.logs.data.Body body) { - if (body.getType() == io.opentelemetry.sdk.logs.data.Body.Type.STRING) { + public Builder setBody(Body body) { + if (body.getType() == Body.Type.STRING) { setBodyValue(Value.of(body.asString())); - } else if (body.getType() == io.opentelemetry.sdk.logs.data.Body.Type.EMPTY) { + } else if (body.getType() == Body.Type.EMPTY) { setBodyValue(null); } return this; diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.java index 914927c28be..44fe6bf6bfa 100644 --- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.java +++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.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.LogRecordData; import io.opentelemetry.sdk.logs.data.internal.ExtendedLogRecordData; import io.opentelemetry.sdk.resources.Resource; @@ -50,11 +51,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()); } /** @@ -171,10 +170,10 @@ public Builder setBody(String body) { * @deprecated Use {@link #setBodyValue(Value)}. */ @Deprecated - public Builder setBody(io.opentelemetry.sdk.logs.data.Body body) { - if (body.getType() == io.opentelemetry.sdk.logs.data.Body.Type.STRING) { + public Builder setBody(Body body) { + if (body.getType() == Body.Type.STRING) { setBodyValue(Value.of(body.asString())); - } else if (body.getType() == io.opentelemetry.sdk.logs.data.Body.Type.EMPTY) { + } else if (body.getType() == Body.Type.EMPTY) { setBodyValue(null); } return this; From 9eec2c5fd26cdac44a6712dccee92cace2648e93 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Mon, 9 Feb 2026 17:36:20 -0800 Subject: [PATCH 3/6] fix comment --- buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts index 4bc8e127202..4fb221084d9 100644 --- a/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts @@ -93,7 +93,7 @@ tasks { "-Xlint:-this-escape", // 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 Error Prone's OtelDeprecatedApiUsage check instead, which honors @SuppressWarnings. + // We use a custom Error Prone check instead (OtelDeprecatedApiUsage). "-Xlint:-deprecation", // Fail build on any warning "-Werror", From afc0f016c439de0df54e5c8e7a7c31f8bf4bd0f2 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Tue, 10 Feb 2026 13:22:01 -0800 Subject: [PATCH 4/6] fix --- .../gradle/customchecks/OtelDeprecatedApiUsageTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 index edb877434ec..56fa4113f2e 100644 --- a/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java +++ b/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java @@ -29,9 +29,9 @@ void positiveCases() { "package test;", "public class PositiveCases {", " void method() {", - " // BUG: Diagnostic contains: Use of deprecated method", + " // BUG: Diagnostic contains: Use of deprecated API: deprecatedMethod()", " DeprecatedClass.deprecatedMethod();", - " // BUG: Diagnostic contains: Use of deprecated field", + " // BUG: Diagnostic contains: Use of deprecated API: DEPRECATED_FIELD", " String s = DeprecatedClass.DEPRECATED_FIELD;", " }", "}") @@ -51,7 +51,7 @@ void positiveCases_classAsFieldType() { "PositiveCases.java", "package test;", "public class PositiveCases {", - " // BUG: Diagnostic contains: Use of deprecated class", + " // BUG: Diagnostic contains: Use of deprecated API: test.DeprecatedClass", " DeprecatedClass obj;", "}") .doTest(); From 8d446a7072c57b7b3cbcfd7fb95f598e5b8d2de8 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 12 Feb 2026 15:25:58 -0800 Subject: [PATCH 5/6] linkType NONE --- .../gradle/customchecks/OtelDeprecatedApiUsage.java | 2 ++ .../gradle/customchecks/OtelInternalJavadoc.java | 4 +++- .../customchecks/OtelPrivateConstructorForUtilityClass.java | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) 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 index 45eed6cb1df..3489fc851de 100644 --- a/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java +++ b/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java @@ -5,6 +5,7 @@ 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; @@ -34,6 +35,7 @@ @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 diff --git a/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelInternalJavadoc.java b/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelInternalJavadoc.java index 29d9b5921bc..84dfb920cb5 100644 --- a/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelInternalJavadoc.java +++ b/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelInternalJavadoc.java @@ -5,6 +5,7 @@ package io.opentelemetry.gradle.customchecks; +import static com.google.errorprone.BugPattern.LinkType.NONE; import static com.google.errorprone.BugPattern.SeverityLevel.WARNING; import com.google.errorprone.BugPattern; @@ -26,7 +27,8 @@ + "\", or \"" + OtelInternalJavadoc.EXPECTED_INTERNAL_COMMENT_V2 + "\"", - severity = WARNING) + severity = WARNING, + linkType = NONE) public class OtelInternalJavadoc extends BugChecker implements BugChecker.ClassTreeMatcher { private static final long serialVersionUID = 1L; diff --git a/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelPrivateConstructorForUtilityClass.java b/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelPrivateConstructorForUtilityClass.java index 5aff2f1db4c..08b538588e5 100644 --- a/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelPrivateConstructorForUtilityClass.java +++ b/custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelPrivateConstructorForUtilityClass.java @@ -5,6 +5,7 @@ package io.opentelemetry.gradle.customchecks; +import static com.google.errorprone.BugPattern.LinkType.NONE; import static com.google.errorprone.BugPattern.SeverityLevel.WARNING; import static com.google.errorprone.matchers.Description.NO_MATCH; @@ -18,7 +19,8 @@ @BugPattern( summary = "Classes which are not intended to be instantiated should be made non-instantiable with a private constructor. This includes utility classes (classes with only static members), and the main class.", - severity = WARNING) + severity = WARNING, + linkType = NONE) public class OtelPrivateConstructorForUtilityClass extends BugChecker implements BugChecker.ClassTreeMatcher { From 3749e03c84e1dd37d9ed27de82c367f02ca94cfb Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 12 Feb 2026 15:27:33 -0800 Subject: [PATCH 6/6] one more test --- .../OtelDeprecatedApiUsageTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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 index 56fa4113f2e..4a98e0a0f8f 100644 --- a/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java +++ b/custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java @@ -152,6 +152,26 @@ void negativeCases_sameClassDeprecation() { .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)