Add support for JSpecify annotations in SpringCodegen
Closed
FE
8mo ago+148+148+012345678901234567890123456789-6-6-0123456789
- Introduced
useJSpecifyflag to enable the use of JSpecify's@Nullableannotations. - Modified POJO templates to correctly place JSpecify annotations for
TYPE_USEcompatibility. - Updated importMappings to handle hardcoded JSpecify annotations when enabled.
- Added a test case for verifying correct annotation placement and behavior (
issue_23206.yamland corresponding Java test). - fixes #23206
PR checklist
- Read the contribution guidelines.
- Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
- Run the following to build the project and update samples:
(For Windows users, please run the script in WSL)./mvnw clean package || exit ./bin/generate-samples.sh ./bin/configs/*.yaml || exit ./bin/utils/export_docs_generators.sh || exit
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example./bin/generate-samples.sh bin/configs/java*.
IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed. - File the PR against the correct branch:
master(upcoming7.x.0minor release - breaking changes with fallbacks),8.0.x(breaking changes without fallbacks) - If your PR solves a reported issue, reference it using GitHub's linking syntax (e.g., having
"fixes #123"present in the PR description) - If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.
Summary by cubic
Adds an optional useJSpecify flag in SpringCodegen to generate JSpecify @Nullable as a TYPE_USE annotation in POJOs and include the org.jspecify:jspecify dependency when enabled. Fixes incorrect @Nullable placement and enables JSpecify-compatible builds (fixes #23206).
-
New Features
useJSpecify: when true, mapsNullabletoorg.jspecify.annotations.Nullable(overrides any userimportMapping).- Emits
@Nullableon the type for fields, getters, and setters (e.g.,a.b.c.@Nullable TypeName). - Simplifies
pojo.mustacheto insert type-use annotations viax-jspecify-annotated-type. - Conditionally adds
org.jspecify:jspecify:1.0.0to Springpom.mustachetemplates (spring-boot,spring-cloud,spring-http-interface). - Adds tests for schema-mapped and imported types; updates docs for Spring and Java Camel generators.
-
Migration
- Off by default. Enable with
--additional-properties useJSpecify=true.
- Off by default. Enable with
@bbdouglas @sreeshas @jfiala @lukoyanov @cbornet @jeff9finger @karismann @Zomzog @lwlee2608 @martin-mfg