public static T getHandler()

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;

    }