in src/main/java/org/apache/commons/ognl/internal/ClassCacheHandler.java [31:84]
public static <T> T getHandler( Class<?> forClass, ClassCache<T> handlers )
throws CacheException
{
T answer;
synchronized ( handlers )
{
answer = handlers.get( forClass );
if ( answer == null )
{
Class<?> keyFound;
if ( forClass.isArray() )
{
answer = handlers.get( Object[].class );
keyFound = null;
}
else
{
keyFound = forClass;
outer:
for ( Class<?> clazz = forClass; clazz != null; clazz = clazz.getSuperclass() )
{
answer = handlers.get( clazz );
if ( answer != null ) {
keyFound = clazz;
break;
}
Class<?>[] interfaces = clazz.getInterfaces();
for ( Class<?> iface : interfaces )
{
answer = handlers.get( iface );
if ( answer == null )
{
/* Try super-interfaces */
answer = getHandler( iface, handlers );
}
if ( answer != null )
{
keyFound = iface;
break outer;
}
}
}
}
if ( answer != null && keyFound != forClass )
{
handlers.put( forClass, answer );
}
}
}
return answer;
}