spring-projects/spring-framework — pull request #607 by dharaburda (2014-07-30 22:21:50+00:00)
Title: Change GenericConversionService to match interfaces before enums

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.