CAMEL-22640: Add JSpecify null safety annotations to camel-api#22313
Draft
gnodet wants to merge 3 commits intoapache:mainfrom
Draft
CAMEL-22640: Add JSpecify null safety annotations to camel-api#22313gnodet wants to merge 3 commits intoapache:mainfrom
gnodet wants to merge 3 commits intoapache:mainfrom
Conversation
Add @NullMarked (JSpecify 1.0.0) to all packages in camel-api, making non-null the default. Annotate ~200 API interfaces and classes with @nullable where parameters or return values can legitimately be null, covering the core API surface including CamelContext, Exchange, Message, Component, Endpoint, TypeConverter, and all SPI interfaces. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Contributor
|
🌟 Thank you for your contribution to the Apache Camel project! 🌟 🐫 Apache Camel Committers, please review the following items:
|
Scan actual implementations (not just Javadoc) for return null, null field values, and caller null-checks. Adds missing @nullable annotations and moves @NullMarked to package-level only. Key additions found by implementation scanning: - Exchange.getPattern() can be null (field uninitialized) - Message.getExchange() can be null (field starts null) - Route.getOnException/navigate() can return null - DelegateProcessor.getProcessor() can be null (LazyStartProducer) - Various transient exception fields nullable after deserialization - ConsumerTemplate.receiveBody() without timeout can return null - CamelContext.getComponent() overloads can return null - ExtendedCamelContext.getErrorHandlerFactory() can be null - Multiple SPI methods found nullable through impl analysis Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- CamelExchangeException: accept @nullable exchange (field already nullable) - CamelExecutionException: accept @nullable exchange (called with null from ExchangeHelper) - ExchangeTimedOutException: accept @nullable exchange (consistent with parent) - Transformer: setFrom/setTo accept @nullable (fields already nullable, called with null from reifiers) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add JSpecify null safety annotations (
@NullMarked/@Nullable) to thecamel-apimodule, aligning with Spring Framework 7 / Spring Boot 4's adoption of JSpecify as the standard null safety annotation library.Changes
org.jspecify:jspecify:1.0.0toparent/pom.xml(dependencyManagement) andcore/camel-api/pom.xml@NullMarkedon all packages: Addedpackage-info.javawith@NullMarkedto all 16 packages in camel-api, making non-null the default@Nullableannotations: Comprehensive audit of all ~200+ Java files, marking parameters, return types, and fields that can be null. Annotations were verified by:return null!= null/== nullguardsObjects.requireNonNull()checks on non-null reference parameters in all concrete classes, providing fail-fast behavior at API boundaries@Nullable— these were fixed:CamelExchangeExceptionconstructors:exchangeparam made@Nullable(field already nullable)CamelExecutionException:exchangeparam made@Nullable(called with null fromExchangeHelper)ExchangeTimedOutException:exchangeparam made@Nullable(consistent with parent)RuntimeExchangeException:exchangeparam already@Nullable(verified)ValidationException:exchangeparam already@Nullable(verified)ResolveEndpointFailedException:uriparam made@NullableExpressionEvaluationException:expression/exchangeparams made@NullableTransformer.setName():scheme/nameparams made@NullableTransformer.setFrom()/setTo(): params made@Nullable(fields already nullable)JsseParameters.parsePropertyValue():valueparam made@NullableEventClock.add()/ContextClock.add():clockparam made@NullableApproach
@NullMarkedduring review, then moved to package-level at the endObjects.requireNonNull()enforcement on concrete classes caught 10+ missed@NullableannotationsJIRA: CAMEL-22640