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);
}
}