Change GenericConversionService to match interfaces before enums #607
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.
Prior to this commit, given an enum which implements some interface,
GenericConversionService would select the String -> Enum converter even
if a converter for String -> SomeInterface was registered. This also
affected converters that were registered for String ->
SomeBaseInterface, when SomeInterface extended SomeBaseInterface.
This change modifies the behavior of the private method
getClassHierarchy() by placing interfaces first in the class hierarchy
that is returned. To ensure that any implementing interfaces also had
their super-interfaces explored and added to the hierarchy before the
superclass, the logic for traversing the class hierarchy was changed to
use a stack of candidate types to add the hierarchy.
Previously the hiearchy was built up in an ArrayList, with an auxillary
set used to make sure duplicates were not added (presumably for
performance?). I have changed the hierarchy to be built up in a
LinkedHashSet, which preserves these semantics, although the method now
returns Iterable instead of List.
Issue: SPR-12050
I have signed and agree to the terms of the SpringSource Individual
Contributor License Agreement.