v6.0.0#61
Conversation
There was a problem hiding this comment.
Pull request overview
This PR appears to be the v6.0.0 release cut of the SDK, primarily refactoring bus/train client internals (configuration + JSON parsing), standardizing null-safety/annotation usage, and introducing typed Bus Tracker wire envelopes/errors to support consistent error-handling behavior.
Changes:
- Replace
*ApiContext(incl. embeddedObjectMapper) with slimmer*ApiConfigrecords and shift parsing toJsonMapper.shared(). - Rework Bus “bustime-response” wire modeling to use typed
Cta<Feature>BustimeResponse+ typedCta<Feature>Errorrecords, aligning implementations with a consistent “data vs errors vs not-found” decision flow (plus warn logging for empty responses). - Apply broad formatting/annotation updates (
@NullMarked, annotation ordering) and update version/docs for the major release.
Reviewed changes
Copilot reviewed 108 out of 108 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/java/com/cta4j/train/station/model/Station.java | Formatting + compact-constructor null-safety adjustments for station model. |
| src/main/java/com/cta4j/train/station/model/Location.java | Formatting of nullable component and record layout. |
| src/main/java/com/cta4j/train/station/model/HumanAddress.java | Formatting-only changes for record layout. |
| src/main/java/com/cta4j/train/station/internal/wire/CtaStation.java | Standardize annotation order + compact record formatting for train stations wire DTO. |
| src/main/java/com/cta4j/train/station/internal/wire/CtaLocation.java | Standardize annotation order + formatting for train station location wire DTO. |
| src/main/java/com/cta4j/train/station/internal/impl/StationsApiImpl.java | Switch from context to config + JsonMapper.shared() for station list parsing. |
| src/main/java/com/cta4j/train/location/model/TrainLocations.java | Formatting + compact-constructor null-safety adjustments for train locations model. |
| src/main/java/com/cta4j/train/location/model/LocationTrain.java | Formatting of nullable component and record layout. |
| src/main/java/com/cta4j/train/location/internal/wire/CtaRoute.java | Annotation order + formatting for location route wire DTO. |
| src/main/java/com/cta4j/train/location/internal/wire/CtaLocationTrain.java | Annotation order + formatting for location train wire DTO. |
| src/main/java/com/cta4j/train/location/internal/wire/CtaLocationResponse.java | Annotation order + formatting for location response wire DTO. |
| src/main/java/com/cta4j/train/location/internal/impl/LocationsApiImpl.java | Switch from context to config + JsonMapper.shared() + endpoint formatting updates. |
| src/main/java/com/cta4j/train/follow/model/FollowTrain.java | Formatting + compact-constructor null-safety adjustments for follow response model. |
| src/main/java/com/cta4j/train/follow/internal/wire/CtaPosition.java | Annotation order + compact formatting for follow position wire DTO. |
| src/main/java/com/cta4j/train/follow/internal/wire/CtaFollowResponse.java | Annotation order + formatting for follow response wire DTO. |
| src/main/java/com/cta4j/train/follow/internal/mapper/FollowTrainMapper.java | Reformat MapStruct @Mapper annotation for readability/consistency. |
| src/main/java/com/cta4j/train/follow/internal/impl/FollowApiImpl.java | Switch from context to config + JsonMapper.shared() + endpoint formatting updates. |
| src/main/java/com/cta4j/train/common/model/ArrivalMetadata.java | Formatting of nullable components and record layout. |
| src/main/java/com/cta4j/train/common/model/Arrival.java | Formatting-only changes for record layout. |
| src/main/java/com/cta4j/train/common/internal/wire/CtaResponse.java | Annotation order normalization for train outer response DTO. |
| src/main/java/com/cta4j/train/common/internal/wire/CtaError.java | Annotation placement/order adjustment on train error type. |
| src/main/java/com/cta4j/train/common/internal/wire/CtaArrival.java | Annotation order + formatting for train arrival wire DTO. |
| src/main/java/com/cta4j/train/common/internal/util/ApiUtils.java | String formatting modernization (formatted) + @NullMarked placement. |
| src/main/java/com/cta4j/train/common/internal/mapper/Qualifiers.java | Use JsonMapper.shared() for embedded JSON parsing + string formatting updates + annotation placement. |
| src/main/java/com/cta4j/train/common/internal/impl/TrainApiImpl.java | Remove injectable ObjectMapper from constructor; construct APIs using TrainApiConfig. |
| src/main/java/com/cta4j/train/common/internal/config/TrainApiConfig.java | Rename/move from context → config and drop ObjectMapper from stored config. |
| src/main/java/com/cta4j/train/arrival/query/StopArrivalQuery.java | Formatting of nullable components and record layout. |
| src/main/java/com/cta4j/train/arrival/query/MapArrivalQuery.java | Formatting of nullable components and record layout. |
| src/main/java/com/cta4j/train/arrival/internal/wire/CtaArrivalsResponse.java | Annotation order + formatting for arrivals response wire DTO. |
| src/main/java/com/cta4j/train/arrival/internal/impl/ArrivalsApiImpl.java | Switch from context to config + JsonMapper.shared() + endpoint formatting updates. |
| src/main/java/com/cta4j/exception/Cta4jException.java | Mark exception final and add @NullMarked. |
| src/main/java/com/cta4j/common/internal/json/Cta4jObjectMapper.java | Remove internal singleton ObjectMapper utility (replaced by JsonMapper.shared()). |
| src/main/java/com/cta4j/common/internal/http/HttpClient.java | Annotation placement + String#formatted updates for error messages. |
| src/main/java/com/cta4j/common/geo/GeoConstants.java | Formatting-only cleanup. |
| src/main/java/com/cta4j/common/geo/Coordinates.java | String#formatted modernization for validation messages + formatting cleanup. |
| src/main/java/com/cta4j/bus/vehicle/VehiclesApi.java | Javadoc clarifications about error cases; string formatting modernization. |
| src/main/java/com/cta4j/bus/vehicle/model/VehicleMetadata.java | Formatting of nullable components and record layout. |
| src/main/java/com/cta4j/bus/vehicle/model/Vehicle.java | Formatting-only changes for record layout. |
| src/main/java/com/cta4j/bus/vehicle/model/TransitMode.java | Add @NullMarked + string formatting modernization for error message. |
| src/main/java/com/cta4j/bus/vehicle/internal/wire/CtaVehicleError.java | New typed vehicle error wire record implementing CtaError. |
| src/main/java/com/cta4j/bus/vehicle/internal/wire/CtaVehicleBustimeResponse.java | New typed bustime-response wrapper for vehicles endpoint. |
| src/main/java/com/cta4j/bus/vehicle/internal/wire/CtaVehicle.java | Annotation order + formatting for vehicle wire DTO. |
| src/main/java/com/cta4j/bus/vehicle/internal/impl/VehiclesApiImpl.java | Switch to config + typed bustime response + warn logging + new not-found handling logic + JsonMapper.shared(). |
| src/main/java/com/cta4j/bus/stop/StopsApi.java | Javadoc clarifications and expanded exception documentation. |
| src/main/java/com/cta4j/bus/stop/model/Stop.java | Formatting of nullable components and record layout. |
| src/main/java/com/cta4j/bus/stop/internal/wire/CtaStopError.java | New typed stop error wire record implementing CtaError. |
| src/main/java/com/cta4j/bus/stop/internal/wire/CtaStopBustimeResponse.java | New typed bustime-response wrapper for stops endpoint. |
| src/main/java/com/cta4j/bus/stop/internal/wire/CtaStop.java | Annotation order + formatting for stop wire DTO. |
| src/main/java/com/cta4j/bus/stop/internal/impl/StopsApiImpl.java | Switch to config + typed bustime response + warn logging + not-found handling + JsonMapper.shared(). |
| src/main/java/com/cta4j/bus/route/RoutesApi.java | Add exception documentation and clarify empty-list behavior. |
| src/main/java/com/cta4j/bus/route/model/Route.java | Formatting of nullable component and record layout. |
| src/main/java/com/cta4j/bus/route/internal/wire/CtaRouteError.java | New typed route error wire record implementing CtaError. |
| src/main/java/com/cta4j/bus/route/internal/wire/CtaRouteBustimeResponse.java | New typed bustime-response wrapper for routes endpoint. |
| src/main/java/com/cta4j/bus/route/internal/wire/CtaRoute.java | Annotation order + formatting for route wire DTO. |
| src/main/java/com/cta4j/bus/route/internal/impl/RoutesApiImpl.java | Switch to config + typed bustime response + warn logging + JsonMapper.shared(). |
| src/main/java/com/cta4j/bus/prediction/query/VehiclesPredictionsQuery.java | Add max-IDs validation, builder API tweak, and tighten input constraints. |
| src/main/java/com/cta4j/bus/prediction/query/StopsPredictionsQuery.java | Add max-IDs validation, builder API tweak, and tighten input constraints. |
| src/main/java/com/cta4j/bus/prediction/PredictionsApi.java | Add exception documentation for parse/error responses. |
| src/main/java/com/cta4j/bus/prediction/model/PredictionType.java | Add @NullMarked. |
| src/main/java/com/cta4j/bus/prediction/model/PredictionMetadata.java | Formatting + small Javadoc wording adjustment. |
| src/main/java/com/cta4j/bus/prediction/model/Prediction.java | Formatting of nullable component and record layout. |
| src/main/java/com/cta4j/bus/prediction/model/PassengerLoad.java | Add @NullMarked. |
| src/main/java/com/cta4j/bus/prediction/model/FlagStop.java | Add @NullMarked + string formatting modernization for error message. |
| src/main/java/com/cta4j/bus/prediction/model/DynamicAction.java | Add @NullMarked + string formatting modernization for error message. |
| src/main/java/com/cta4j/bus/prediction/internal/wire/CtaPredictionError.java | New typed prediction error wire record implementing CtaError. |
| src/main/java/com/cta4j/bus/prediction/internal/wire/CtaPredictionBustimeResponse.java | New typed bustime-response wrapper for predictions endpoint. |
| src/main/java/com/cta4j/bus/prediction/internal/wire/CtaPrediction.java | Annotation order + formatting for prediction wire DTO. |
| src/main/java/com/cta4j/bus/prediction/internal/impl/PredictionsApiImpl.java | Switch to config + typed bustime response + warn logging + not-found handling + JsonMapper.shared(). |
| src/main/java/com/cta4j/bus/pattern/PatternsApi.java | Javadoc clarifications and expanded exception documentation. |
| src/main/java/com/cta4j/bus/pattern/model/RoutePattern.java | Formatting + compact-constructor null-safety adjustments for pattern model. |
| src/main/java/com/cta4j/bus/pattern/model/PatternPointType.java | Add @NullMarked. |
| src/main/java/com/cta4j/bus/pattern/model/PatternPoint.java | Formatting + Javadoc wording refinement. |
| src/main/java/com/cta4j/bus/pattern/internal/wire/CtaPoint.java | Annotation order + formatting for pattern point wire DTO. |
| src/main/java/com/cta4j/bus/pattern/internal/wire/CtaPatternError.java | New typed pattern error wire record implementing CtaError. |
| src/main/java/com/cta4j/bus/pattern/internal/wire/CtaPatternBustimeResponse.java | New typed bustime-response wrapper for patterns endpoint. |
| src/main/java/com/cta4j/bus/pattern/internal/wire/CtaPattern.java | Annotation order + formatting + nullable detour fields for pattern wire DTO. |
| src/main/java/com/cta4j/bus/pattern/internal/impl/PatternsApiImpl.java | Switch to config + typed bustime response + warn logging + not-found handling + JsonMapper.shared(). |
| src/main/java/com/cta4j/bus/locale/model/SupportedLocale.java | Formatting + small Javadoc wording refinement. |
| src/main/java/com/cta4j/bus/locale/LocalesApi.java | Clarify empty-list behavior, add exception docs, and tighten parameter docs. |
| src/main/java/com/cta4j/bus/locale/internal/wire/CtaLocaleError.java | New typed locale error wire record implementing CtaError. |
| src/main/java/com/cta4j/bus/locale/internal/wire/CtaLocaleBustimeResponse.java | New typed bustime-response wrapper for locales endpoint. |
| src/main/java/com/cta4j/bus/locale/internal/wire/CtaLocale.java | Annotation order + formatting for locale wire DTO. |
| src/main/java/com/cta4j/bus/locale/internal/impl/LocalesApiImpl.java | Switch to config + typed bustime response + warn logging + JsonMapper.shared(). |
| src/main/java/com/cta4j/bus/direction/internal/wire/CtaDirectionError.java | New typed direction error wire record implementing CtaError. |
| src/main/java/com/cta4j/bus/direction/internal/wire/CtaDirectionBustimeResponse.java | New typed bustime-response wrapper for directions endpoint. |
| src/main/java/com/cta4j/bus/direction/internal/wire/CtaDirection.java | Annotation order + formatting for direction wire DTO. |
| src/main/java/com/cta4j/bus/direction/internal/impl/DirectionsApiImpl.java | Switch to config + typed bustime response + warn logging + not-found handling + JsonMapper.shared(). |
| src/main/java/com/cta4j/bus/direction/DirectionsApi.java | Clarify empty-list behavior and add exception docs. |
| src/main/java/com/cta4j/bus/detour/model/DetourRouteDirection.java | Formatting + minor Javadoc wording refinement. |
| src/main/java/com/cta4j/bus/detour/model/Detour.java | Formatting + compact-constructor null-safety adjustments for detour model. |
| src/main/java/com/cta4j/bus/detour/internal/wire/CtaDetourRouteDirection.java | Fix naming (CtaDetourRouteDirection) + annotation order + formatting. |
| src/main/java/com/cta4j/bus/detour/internal/wire/CtaDetourError.java | New typed detour error wire record implementing CtaError. |
| src/main/java/com/cta4j/bus/detour/internal/wire/CtaDetourBustimeResponse.java | New typed bustime-response wrapper for detours endpoint. |
| src/main/java/com/cta4j/bus/detour/internal/wire/CtaDetour.java | Update route-directions DTO type + annotation order + formatting. |
| src/main/java/com/cta4j/bus/detour/internal/mapper/DetourMapper.java | Update mapper signature to renamed detour route-direction DTO. |
| src/main/java/com/cta4j/bus/detour/internal/impl/DetoursApiImpl.java | Switch to config + typed bustime response + warn logging + not-found handling + JsonMapper.shared(). |
| src/main/java/com/cta4j/bus/detour/DetoursApi.java | Clarify empty-list behavior and add exception docs. |
| src/main/java/com/cta4j/bus/common/internal/wire/CtaTimeError.java | New typed system-time error wire record implementing CtaError. |
| src/main/java/com/cta4j/bus/common/internal/wire/CtaTimeBustimeResponse.java | New typed bustime-response wrapper for system time endpoint. |
| src/main/java/com/cta4j/bus/common/internal/wire/CtaResponse.java | Change envelope to CtaResponse<T> with typed bustimeResponse payload. |
| src/main/java/com/cta4j/bus/common/internal/wire/CtaError.java | Replace generic error record with CtaError interface (msg() contract). |
| src/main/java/com/cta4j/bus/common/internal/util/ApiUtils.java | Accept List<? extends CtaError> + defensive copying + string formatting modernization. |
| src/main/java/com/cta4j/bus/common/internal/mapper/Qualifiers.java | String formatting modernization for mapper validation errors + annotation placement. |
| src/main/java/com/cta4j/bus/common/internal/impl/BusApiImpl.java | Remove injectable ObjectMapper, adopt BusApiConfig, parse typed time response, and adjust error handling. |
| src/main/java/com/cta4j/bus/common/internal/config/BusApiConfig.java | Rename/move from context → config and drop ObjectMapper from stored config. |
| src/main/java/com/cta4j/bus/BusApi.java | Add exception documentation for systemTime() + builder null-guard doc. |
| pom.xml | Bump project version to 6.0.0. |
| CLAUDE.md | Add repository-level contributor guidance (API surface, wire conventions, error-handling pattern, null-safety rules). |
Comments suppressed due to low confidence (1)
src/main/java/com/cta4j/bus/detour/model/Detour.java:60
routeDirectionsis required (non-@nullable) but is no longer explicitly guarded withObjects.requireNonNull(...)even though the Javadoc documents it as null-intolerant. To align with the repo’s null-safety convention (CLAUDE.md:85) and provide clearer parameter validation, add an explicit null guard beforeList.copyOf(routeDirections).
Objects.requireNonNull(description);
Objects.requireNonNull(startTime);
Objects.requireNonNull(endTime);
routeDirections = List.copyOf(routeDirections);
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 199 out of 199 changed files in this pull request and generated 4 comments.
Comments suppressed due to low confidence (1)
src/main/java/com/cta4j/bus/detour/model/Detour.java:60
routeDirectionsis a non-@nullable record component and the Javadoc says it must be non-null, but the compact constructor no longer explicitly guards it.List.copyOf(routeDirections)will throw a NullPointerException if null, but the repo’s null-safety guidance calls for explicitObjects.requireNonNullchecks for public inputs (CLAUDE.md:83-86).
Objects.requireNonNull(description);
Objects.requireNonNull(startTime);
Objects.requireNonNull(endTime);
routeDirections = List.copyOf(routeDirections);
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 202 out of 202 changed files in this pull request and generated 7 comments.
Comments suppressed due to low confidence (1)
src/main/java/com/cta4j/bus/detour/model/Detour.java:60
- The compact constructor defensively copies
routeDirections, but it no longer explicitly enforces the non-null contract withObjects.requireNonNull(routeDirections)as documented. This diverges from the repo guideline to guard public parameters withObjects.requireNonNull(CLAUDE.md:83-86).
Objects.requireNonNull(description);
Objects.requireNonNull(startTime);
Objects.requireNonNull(endTime);
routeDirections = List.copyOf(routeDirections);
# Conflicts: # pom.xml
No description provided.