Skip to content

Change GenericConversionService to match interfaces before enums #607

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from

Conversation

dharaburda
Copy link
Contributor

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.

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.
snicoll added a commit to snicoll/spring-framework that referenced this pull request Aug 6, 2014
* SPR-12050:
  Change GenericConversionService to better handle enum
@snicoll
Copy link
Member

snicoll commented Aug 6, 2014

Merged with some changes, see issue for more details. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants