public static Handler create()

in gshell-support/gshell-clp/src/main/java/org/apache/geronimo/gshell/clp/handler/Handlers.java [66:99]


    public static Handler create(final Descriptor desc, final Setter setter) {
        assert desc != null;
        assert setter != null;

        Constructor<? extends Handler> factory;
        Class<? extends Handler> handlerType = desc.getHandler();

        if (handlerType == Handler.class) {
            Class valueType = setter.getType();

            // Enum requires some special handling
            if (Enum.class.isAssignableFrom(valueType)) {
                return new EnumHandler(desc, setter, valueType);
            }

            factory = Handlers.getHandlerFactory(valueType);
        }
        else {
            factory = Handlers.createHandlerFactory(handlerType);
        }

        try {
            return factory.newInstance(desc, setter);
        }
        catch (InstantiationException e) {
            throw new IllegalAnnotationError(e);
        }
        catch (IllegalAccessException e) {
            throw new IllegalAnnotationError(e);
        }
        catch (InvocationTargetException e) {
            throw new IllegalAnnotationError(e);
        }
    }