Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
-
Patch
Description
ClassCacheHandler enumerates over the forClass's interfaces and superclasses to find a match key class. But consider the following senario:
interface A implements java.util.Collection
class B extends java.util.AbstractList implements A
Now if ClassCacheHandler.getHandler(B, handlers) is invoked, and assuming handlers is an empty ClassCache, according to the current enumeration logic used by ClassCacheHandler, classes (interfaces) will be enumerated in the following order:
class B
interface A
interface java.util.Collection
interface java.lang.Iterable
interface java.io.Serializable
class java.util.AbstractList
interface java.util.List
interface java.util.Collection
interface java.lang.Iterable
class java.util.AbstractCollection
interface java.util.Collection
interface java.lang.Iterable
if both java.util.Collection and java.util.List are present as keys in the handlers, since java.util.Collection is enumerated first, then it will be matched, instead of java.util.List.
The expected behaviour should be java.util.List is matched, because it is nearer to class B in the hierarchy tree.