Replace Xlint deprecation check with custom errorprone check#8061
Replace Xlint deprecation check with custom errorprone check#8061jack-berg merged 6 commits intoopen-telemetry:mainfrom
Conversation
| } | ||
|
|
||
| @SuppressWarnings("unchecked") | ||
| @SuppressWarnings({"unchecked", "deprecation"}) // deprecation: EXTENDED_ATTRIBUTES |
There was a problem hiding this comment.
it's slightly more strict than javac here, but this does align with Intellij's warnings, so seems good
e79ae1d to
cfd48d7
Compare
Codecov Report❌ Patch coverage is ❌ Your patch status has failed because the patch coverage (27.27%) is below the target coverage (80.00%). You can increase the patch coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## main #8061 +/- ##
============================================
+ Coverage 90.18% 90.23% +0.04%
- Complexity 7591 7594 +3
============================================
Files 841 841
Lines 22911 22911
Branches 2288 2291 +3
============================================
+ Hits 20663 20673 +10
+ Misses 1531 1521 -10
Partials 717 717 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
cfd48d7 to
6ebdc89
Compare
|
This requirement to avoid importing deprecating classes has annoyed me for a while. I'm supportive if you can get the build to pass on java 21, 25 😛 |
6ebdc89 to
86e4227
Compare
86e4227 to
afc0f01
Compare
custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java
Show resolved
Hide resolved
There was a problem hiding this comment.
Pull request overview
This PR replaces javac's -Xlint:deprecation with a custom ErrorProne check to address JDK-8032211, where javac warns on imports of deprecated classes when compiling with --release 8. Since @SuppressWarnings cannot suppress import-level warnings, the solution is to disable -Xlint:deprecation and implement a custom ErrorProne check (OtelDeprecatedApiUsage) that properly honors @SuppressWarnings annotations, including for imports.
Changes:
- Added custom ErrorProne check
OtelDeprecatedApiUsageto detect deprecated API usage while properly supporting@SuppressWarnings - Disabled
-Xlint:deprecationin Gradle build configuration - Replaced fully-qualified class names with simple imports throughout the codebase for deprecated classes like
Body,InstrumentationLibraryInfo,JaegerPropagator,OtTracePropagator, andZipkinSpanExporter
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 29 comments.
Show a summary per file
| File | Description |
|---|---|
| custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java | New ErrorProne check that detects deprecated API usage while properly honoring @SuppressWarnings, including for imports |
| custom-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java | Comprehensive test suite for the new check covering positive/negative cases, suppressions, and edge cases |
| custom-checks/src/main/resources/META-INF/services/com.google.errorprone.bugpatterns.BugChecker | Registers the new OtelDeprecatedApiUsage check with ErrorProne |
| buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts | Disables -Xlint:deprecation and documents the reason |
| sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.java | Adds import for deprecated Body class and replaces fully-qualified names with simple names |
| sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java | Adds import for deprecated Body class and replaces fully-qualified names with simple names |
| sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SdkLogRecordData.java | Adds import for deprecated Body class and replaces fully-qualified names with simple names |
| sdk/logs/src/main/java/io/opentelemetry/sdk/logs/ExtendedSdkLogRecordData.java | Adds import for deprecated Body class and replaces fully-qualified names with simple names |
| sdk/common/src/test/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtilTest.java | Adds import for deprecated InstrumentationLibraryInfo and replaces fully-qualified names |
| sdk/common/src/test/java/io/opentelemetry/sdk/common/InstrumentationLibraryInfoTest.java | Adds import and replaces fully-qualified names for InstrumentationLibraryInfo in comments and code |
| sdk/common/src/main/java/io/opentelemetry/sdk/common/internal/InstrumentationScopeUtil.java | Adds import for deprecated InstrumentationLibraryInfo and replaces fully-qualified names |
| sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/SpanExporterConfigurationTest.java | Adds import for deprecated ZipkinSpanExporter and replaces fully-qualified name |
| sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java | Adds imports for deprecated JaegerPropagator and OtTracePropagator, replaces fully-qualified names |
| sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSpanExporterTest.java | Adds import for deprecated ZipkinSpanExporter and replaces fully-qualified names |
| extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/JaegerPropagatorTest.java | Adds import and replaces fully-qualified names for deprecated JaegerPropagator |
| extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerConfigurablePropagator.java | Adds import and replaces fully-qualified names for deprecated JaegerPropagator in javadoc and code |
| extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextInjectBenchmark.java | Adds import and replaces fully-qualified name for deprecated JaegerPropagator |
| extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextExtractBenchmark.java | Adds import and replaces fully-qualified names for deprecated JaegerPropagator |
| exporters/zipkin/src/test/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProviderTest.java | Adds import for deprecated ZipkinSpanExporter and replaces fully-qualified name |
| exporters/zipkin/src/main/java/io/opentelemetry/exporter/zipkin/internal/ZipkinSpanExporterProvider.java | Adds imports for deprecated ZipkinSpanExporter and ZipkinSpanExporterBuilder, replaces fully-qualified names |
| api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributesBuilder.java | Adds explanatory comment to @SuppressWarnings about deprecated EXTENDED_ATTRIBUTES |
| api/incubator/src/main/java/io/opentelemetry/api/incubator/common/ArrayBackedExtendedAttributes.java | Adds explanatory comment to @SuppressWarnings about deprecated EXTENDED_ATTRIBUTES |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
...om-checks/src/test/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsageTest.java
Show resolved
Hide resolved
custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java
Show resolved
Hide resolved
custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java
Show resolved
Hide resolved
custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java
Show resolved
Hide resolved
custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java
Show resolved
Hide resolved
custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java
Show resolved
Hide resolved
custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java
Show resolved
Hide resolved
custom-checks/src/main/java/io/opentelemetry/gradle/customchecks/OtelDeprecatedApiUsage.java
Show resolved
Hide resolved
sdk/testing/src/main/java/io/opentelemetry/sdk/testing/logs/TestLogRecordData.java
Show resolved
Hide resolved
...ting/src/main/java/io/opentelemetry/sdk/testing/logs/internal/TestExtendedLogRecordData.java
Show resolved
Hide resolved
jack-berg
left a comment
There was a problem hiding this comment.
Small improvement recommendation, but looks good. Thanks!
This ports open-telemetry/opentelemetry-java#8061 to opentelemetry-java-contrib. - Created custom-checks module with OtelDeprecatedApiUsage ErrorProne check - Added comprehensive test suite for the check - Registered the check with ErrorProne via META-INF/services - Updated buildSrc to include custom-checks dependency - Disabled -Xlint:deprecation in favor of the custom check - Added error_prone_test_helpers to dependency management Co-authored-by: trask <218610+trask@users.noreply.github.com>
Motivated by #8060 (well, that and the many PRs in the instrumentation repo where this has plagued me recently)
Context:
When compiling with
--release 8, javac's-Xlint:deprecationwarns on imports of deprecated classes (JDK-8032211). Since@SuppressWarningscannot suppress import-level warnings, this forced us to use fully-qualified class names as a workaround.