Search for custom serializers/deserializers/adapters in a deterministic way #409
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.
Fix for: quarkusio/quarkus#8925
Currently Yasson stores all custom components (where "component" can be a JsonbSerailizer/JsonbDeserializer/JsonbAdapter) in a map, and discovers a matching component for a given type by simply iterating over the values in the component map and returning the first match.
This has a few issues:
For example, consider:
If a user wants to serialize a
new B();
, serializer's A or B would technically match, but serializer B would be the best choice because it is the closest match to the type being serialized.The algorithm I'm proposing we use for matching is:
T
T
implements and select the first matching interfaceT
has a superclass, repeat steps (1) and (2) untiljava.lang.Object
is reached