Standard adapters#3
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR refactors the TypeAdapter/KeyAdapter APIs to be “self-describing” (adapters expose their own TypeRef via type()) and introduces a broad set of standard adapters (scalar, temporal, optional, atomic, array), plus format-bridge updates (Gson/Configurate/BSON) to use the new API surface.
Changes:
- Reworks adapter interfaces/factories: removes passing
TypeRefintoread/write, addstype(), and updates factory composition/predicate creation. - Adds “standard adapters” (scalar, temporal, optional, atomic, array) and updates
TypeAdapters.DEFAULTcomposition accordingly. - Updates Gson/Configurate/BSON integration wrappers/providers to match the new adapter contracts and nullability behavior.
Reviewed changes
Copilot reviewed 118 out of 118 changed files in this pull request and generated 13 comments.
Show a summary per file
| File | Description |
|---|---|
| format/gson/src/main/java/net/roxymc/jserialize/format/gson/WrappedTypeAdapter.java | Updates Gson wrapper to call new TypeAdapter.read/write signatures. |
| format/gson/src/main/java/net/roxymc/jserialize/format/gson/WrappedGsonTypeAdapter.java | Stores TypeRef internally and implements new type() contract. |
| format/gson/src/main/java/net/roxymc/jserialize/format/gson/TypeAdapterProvider.java | Updates provider to construct WrappedTypeAdapter without passing TypeRef. |
| format/gson/src/main/java/net/roxymc/jserialize/format/gson/GsonUtils.java | Updates MapLike bridge to use new adapter method signatures. |
| format/gson/src/main/java/net/roxymc/jserialize/format/gson/GsonTypeAdapters.java | Adapts Gson-backed TypeAdapters implementation to new factory API. |
| format/configurate/src/main/java/net/roxymc/jserialize/format/configurate/WrappedTypeSerializer.java | Stores TypeRef internally and implements new type() contract. |
| format/configurate/src/main/java/net/roxymc/jserialize/format/configurate/TypeAdapterProvider.java | Updates Configurate serializer/provider calls to new adapter method signatures. |
| format/configurate/src/main/java/net/roxymc/jserialize/format/configurate/ConfigurateUtils.java | Updates MapLike bridge to use new adapter method signatures. |
| format/configurate/src/main/java/net/roxymc/jserialize/format/configurate/ConfigurateTypeAdapters.java | Adapts Configurate-backed TypeAdapters implementation to new factory API. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/WrappedTypeAdapter.java | Updates BSON wrapper codec to call new adapter method signatures. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/WrappedCodec.java | Stores TypeRef internally and implements new type() contract. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/BsonUtils.java | Updates MapLike bridge to use new adapter method signatures. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/BsonTypeAdapters.java | Adapts BSON-backed TypeAdapters implementation to new factory API and nullability. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/adapter/package-info.java | Adds @NullMarked for BSON adapter package. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/adapter/BsonTypeAdapters.java | Introduces default BSON adapters registry composition. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/adapter/scalar/package-info.java | Adds @NullMarked for BSON scalar adapters package. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/adapter/scalar/BsonUUIDAdapter.java | Adds BSON UUID adapter with configurable representation. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/adapter/temporal/package-info.java | Adds @NullMarked for BSON temporal adapters package. |
| format/bson/src/main/java/net/roxymc/jserialize/format/bson/adapter/temporal/BsonInstantAdapter.java | Adds BSON Instant adapter using BSON datetime token. |
| core/src/main/java/net/roxymc/jserialize/util/TypeUtils.java | Replaces primitive checks with enum/type-resolution utilities (type param resolution, direct-type resolution). |
| core/src/main/java/net/roxymc/jserialize/util/ObjectUtils.java | Adds nonNull overload for arrays (validates elements). |
| core/src/main/java/net/roxymc/jserialize/type/TypeRef.java | Canonicalizes annotated types and makes raw type eagerly computed/final. |
| core/src/main/java/net/roxymc/jserialize/model/resolver/SimplePropertiesResolver.java | Widens INSTANCE type to interface for API flexibility. |
| core/src/main/java/net/roxymc/jserialize/model/resolver/SimpleConstructorResolver.java | Widens INSTANCE type to interface for API flexibility. |
| core/src/main/java/net/roxymc/jserialize/model/ClassModelFactoryImpl.java | Uses Class::isPrimitive directly for primitive rejection. |
| core/src/main/java/net/roxymc/jserialize/adapter/WriteContext.java | Adds convenience write(...) overloads that resolve adapters internally. |
| core/src/main/java/net/roxymc/jserialize/adapter/TypeWriter.java | Updates writer contract to remove TypeRef parameter. |
| core/src/main/java/net/roxymc/jserialize/adapter/TypeReader.java | Updates reader contract to remove TypeRef parameter. |
| core/src/main/java/net/roxymc/jserialize/adapter/ReadContext.java | Adds convenience read(...) overloads that resolve adapters internally. |
| core/src/main/java/net/roxymc/jserialize/adapter/TypeAdaptersImpl.java | Refactors registry construction and adds explicit create/createKey iteration methods. |
| core/src/main/java/net/roxymc/jserialize/adapter/TypeAdapters.java | Makes TypeAdapters implement both factory interfaces and expands DEFAULT composition. |
| core/src/main/java/net/roxymc/jserialize/adapter/TypeAdapter.java | Refactors adapter and factory APIs (new type(), typed factories, composite factories). |
| core/src/main/java/net/roxymc/jserialize/adapter/KeyAdapter.java | Refactors key adapter and factory APIs (new type(), typed factories, composite factories). |
| core/src/main/java/net/roxymc/jserialize/adapter/PredicateTypeAdapterFactory.java | Updates predicate factory to build adapters via typed factory instead of fixed instance. |
| core/src/main/java/net/roxymc/jserialize/adapter/PredicateKeyAdapterFactory.java | Updates predicate factory to build key adapters via typed factory instead of fixed instance. |
| core/src/main/java/net/roxymc/jserialize/adapter/CompositeTypeAdapterFactory.java | Adds composite TypeAdapter.Factory implementation. |
| core/src/main/java/net/roxymc/jserialize/adapter/CompositeKeyAdapterFactory.java | Adds composite KeyAdapter.Factory implementation. |
| core/src/main/java/net/roxymc/jserialize/adapter/AbstractKeyAdapter.java | Adds base key adapter implementation with common encode/decode behavior. |
| core/src/main/java/net/roxymc/jserialize/adapter/object/PropertyTypes.java | Adds resolved property type caching for object adapter read/write paths. |
| core/src/main/java/net/roxymc/jserialize/adapter/object/ObjectWriter.java | Refactors object writing to use cached property types and WriteContext.write(...). |
| core/src/main/java/net/roxymc/jserialize/adapter/object/ObjectReader.java | Refactors object reading to use cached property types and updated mutable adapter contract. |
| core/src/main/java/net/roxymc/jserialize/adapter/object/ObjectAdapter.java | Refactors object adapter to be type-bound and implement new type() and mutation behavior. |
| core/src/main/java/net/roxymc/jserialize/adapter/map/MapType.java | Refactors map type resolution to use TypeUtils.resolveTypeParams. |
| core/src/main/java/net/roxymc/jserialize/adapter/map/MapAdapter.java | Refactors map adapter to be type-bound and use new key/type read/write contracts. |
| core/src/main/java/net/roxymc/jserialize/adapter/map/DefaultMapProvider.java | Widens INSTANCE type to interface for API flexibility. |
| core/src/main/java/net/roxymc/jserialize/adapter/collection/CollectionType.java | Refactors collection type resolution to use TypeUtils.resolveTypeParams. |
| core/src/main/java/net/roxymc/jserialize/adapter/collection/CollectionAdapter.java | Refactors collection adapter to be type-bound and use new read/write contracts. |
| core/src/main/java/net/roxymc/jserialize/adapter/collection/DefaultCollectionProvider.java | Widens INSTANCE type to interface for API flexibility. |
| core/src/main/java/net/roxymc/jserialize/adapter/array/package-info.java | Adds @NullMarked for array adapter package. |
| core/src/main/java/net/roxymc/jserialize/adapter/array/ArrayAdapter.java | Adds generic array adapter and registers it in defaults. |
| core/src/main/java/net/roxymc/jserialize/adapter/atomic/package-info.java | Adds @NullMarked for atomic adapter package. |
| core/src/main/java/net/roxymc/jserialize/adapter/atomic/AbstractAtomicAdapter.java | Introduces shared atomic adapter mutation/write logic. |
| core/src/main/java/net/roxymc/jserialize/adapter/atomic/AtomicAdapters.java | Adds composite factory for atomic adapters. |
| core/src/main/java/net/roxymc/jserialize/adapter/atomic/AtomicBooleanAdapter.java | Adds AtomicBoolean adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/atomic/AtomicIntegerAdapter.java | Adds AtomicInteger adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/atomic/AtomicLongAdapter.java | Adds AtomicLong adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/atomic/AtomicReferenceAdapter.java | Adds AtomicReference adapter with resolved type parameters. |
| core/src/main/java/net/roxymc/jserialize/adapter/optional/package-info.java | Adds @NullMarked for optional adapter package. |
| core/src/main/java/net/roxymc/jserialize/adapter/optional/AbstractOptionalAdapter.java | Introduces shared optional adapter logic and type-parameter resolution. |
| core/src/main/java/net/roxymc/jserialize/adapter/optional/OptionalAdapter.java | Adds Optional adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/optional/OptionalDoubleAdapter.java | Adds OptionalDouble adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/optional/OptionalIntAdapter.java | Adds OptionalInt adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/optional/OptionalLongAdapter.java | Adds OptionalLong adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/optional/OptionalAdapters.java | Adds composite factory for optional adapters. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/AbstractNumberAdapter.java | Introduces shared numeric parsing/overflow logic for scalar numbers. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/ScalarAdapters.java | Adds composite factory for scalar value adapters. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/ScalarKeyAdapters.java | Refactors scalar key adapters to composite factories and expands coverage. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/EnumKeyAdapter.java | Refactors enum key adapter to AbstractKeyAdapter and predicate factory. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/EnumAdapter.java | Adds enum value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/StringAdapter.java | Adds string value adapter with numeric-to-string support. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/StringKeyAdapter.java | Adds string key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/BooleanAdapter.java | Adds boolean value adapter (boxed + primitive handling). |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/BooleanKeyAdapter.java | Adds boolean key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/ByteAdapter.java | Adds byte value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/ByteKeyAdapter.java | Adds byte key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/CharacterAdapter.java | Adds char/Character value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/CharacterKeyAdapter.java | Adds character key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/DoubleAdapter.java | Adds double/Double value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/DoubleKeyAdapter.java | Adds double key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/FloatAdapter.java | Adds float/Float value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/FloatKeyAdapter.java | Adds float key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/IntegerAdapter.java | Adds int/Integer value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/IntegerKeyAdapter.java | Adds integer key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/LongAdapter.java | Adds long/Long value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/LongKeyAdapter.java | Adds long key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/ShortAdapter.java | Adds short/Short value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/ShortKeyAdapter.java | Adds short key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/NumberAdapter.java | Adds general Number adapter with BigInteger/BigDecimal fallback. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/NumberKeyAdapter.java | Adds number key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/PathAdapter.java | Adds Path value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/PathKeyAdapter.java | Adds Path key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/FileAdapter.java | Adds File value adapter using Path adapter via contexts. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/FileKeyAdapter.java | Adds File key adapter using Path key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/URIAdapter.java | Adds URI value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/URIKeyAdapter.java | Adds URI key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/URLAdapter.java | Adds URL value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/URLKeyAdapter.java | Adds URL key adapter with validation. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/UUIDAdapter.java | Adds UUID value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/scalar/UUIDKeyAdapter.java | Adds UUID key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/package-info.java | Adds @NullMarked for temporal adapters package. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/AbstractTemporalAdapter.java | Adds shared temporal value adapter logic (string-based encoding). |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/AbstractTemporalKeyAdapter.java | Adds shared temporal key adapter logic. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/TemporalAdapters.java | Adds composite factory for temporal value adapters. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/TemporalKeyAdapters.java | Adds composite factory for temporal key adapters. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/DateAdapter.java | Adds Date value adapter via Instant. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/DateKeyAdapter.java | Adds Date key adapter via Instant key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/InstantAdapter.java | Adds Instant value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/InstantKeyAdapter.java | Adds Instant key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/LocalDateAdapter.java | Adds LocalDate value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/LocalDateKeyAdapter.java | Adds LocalDate key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/LocalTimeAdapter.java | Adds LocalTime value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/LocalTimeKeyAdapter.java | Adds LocalTime key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/LocalDateTimeAdapter.java | Adds LocalDateTime value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/LocalDateTimeKeyAdapter.java | Adds LocalDateTime key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/OffsetDateTimeAdapter.java | Adds OffsetDateTime value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/OffsetDateTimeKeyAdapter.java | Adds OffsetDateTime key adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/ZonedDateTimeAdapter.java | Adds ZonedDateTime value adapter. |
| core/src/main/java/net/roxymc/jserialize/adapter/temporal/ZonedDateTimeKeyAdapter.java | Adds ZonedDateTime key adapter. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
GliczDev
force-pushed
the
feat/standard-adapters
branch
from
July 4, 2026 13:55
7a41e38 to
b900a00
Compare
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.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.
No description provided.