Skip to content

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