public CRaSH() throws IntrospectionException { this.descriptor = CommandFactory.DEFAULT.create(CRaSH.class); }
public ClassShellCommand(Class<T> clazz) throws IntrospectionException { CommandFactory factory = new CommandFactory(getClass().getClassLoader()); this.clazz = clazz; this.descriptor = HelpDescriptor.create(factory.create(clazz)); }
private List<ParameterDescriptor> parameters(Class<?> introspected) throws IntrospectionException { List<ParameterDescriptor> parameters; Class<?> superIntrospected = introspected.getSuperclass(); if (superIntrospected == null) { parameters = new ArrayList<ParameterDescriptor>(); } else { parameters = parameters(superIntrospected); for (Field f : introspected.getDeclaredFields()) { Tuple tuple = get(f.getAnnotations()); ClassFieldBinding binding = new ClassFieldBinding(f); ParameterDescriptor parameter = create( binding, f.getGenericType(), tuple.argumentAnn, tuple.optionAnn, tuple.required, tuple.descriptionAnn, tuple.ann); if (parameter != null) { parameters.add(parameter); } } } return parameters; } }
public <T> ObjectCommandDescriptor<T> create(Class<T> type) throws IntrospectionException { List<Method> methods = findAllMethods(type); MethodDescriptor<T> methodDescriptor = create(null, commandName, methods.get(0)); for (ParameterDescriptor parameter : parameters(type)) { methodDescriptor.addParameter(parameter); methodName = method.getName(); MethodDescriptor<T> methodDescriptor = create(classDescriptor, methodName, method); methodMap.put(methodDescriptor.getName(), methodDescriptor); for (ParameterDescriptor parameter : parameters(type)) { classDescriptor.addParameter(parameter);
private <T> MethodDescriptor<T> create(ClassDescriptor<T> classDescriptor, String name, Method method) throws IntrospectionException { Description info = new Description(method); MethodDescriptor<T> methodDescriptor = new MethodDescriptor<T>( classDescriptor, method, name, info); Type[] parameterTypes = method.getGenericParameterTypes(); Annotation[][] parameterAnnotationMatrix = method.getParameterAnnotations(); for (int i = 0;i < parameterAnnotationMatrix.length;i++) { Annotation[] parameterAnnotations = parameterAnnotationMatrix[i]; Type parameterType = parameterTypes[i]; Tuple tuple = get(parameterAnnotations); MethodArgumentBinding binding = new MethodArgumentBinding(i); ParameterDescriptor parameter = create( binding, parameterType, tuple.argumentAnn, tuple.optionAnn, tuple.required, tuple.descriptionAnn, tuple.ann); if (parameter != null) { methodDescriptor.addParameter(parameter); } else { log.log(Level.FINE, "Method argument with index " + i + " of method " + method + " is not annotated"); } } return methodDescriptor; }
public static final CommandFactory DEFAULT = new CommandFactory();
public <T> CommandDescriptorImpl<T> create(Class<T> type) throws IntrospectionException { // Map<String, MethodDescriptor<T>> methodMap = new LinkedHashMap<String, MethodDescriptor<T>>(); ClassDescriptor<T> descriptor = new ClassDescriptor<T>(type, methodMap, new Description(type)); for (MethodDescriptor<T> method : commands(descriptor, type)) { methodMap.put(method.getName(), method); } // for (ParameterDescriptor parameter : parameters(type)) { descriptor.addParameter(parameter); } // return descriptor; }
private <T> MethodDescriptor<T> create(ClassDescriptor<T> classDescriptor, String name, Method method) throws IntrospectionException { Description info = new Description(method); MethodDescriptor<T> methodDescriptor = new MethodDescriptor<T>( classDescriptor, method, name, info); Type[] parameterTypes = method.getGenericParameterTypes(); Annotation[][] parameterAnnotationMatrix = method.getParameterAnnotations(); for (int i = 0;i < parameterAnnotationMatrix.length;i++) { Annotation[] parameterAnnotations = parameterAnnotationMatrix[i]; Type parameterType = parameterTypes[i]; Tuple tuple = get(parameterAnnotations); MethodArgumentBinding binding = new MethodArgumentBinding(i); ParameterDescriptor parameter = create( binding, parameterType, tuple.argumentAnn, tuple.optionAnn, tuple.required, tuple.descriptionAnn, tuple.ann); if (parameter != null) { methodDescriptor.addParameter(parameter); } else { log.log(Level.FINE, "Method argument with index " + i + " of method " + method + " is not annotated"); } } return methodDescriptor; }
public <T> ObjectCommandDescriptor<T> create(Class<T> type) throws IntrospectionException { List<Method> methods = findAllMethods(type); MethodDescriptor<T> methodDescriptor = create(null, commandName, methods.get(0)); for (ParameterDescriptor parameter : parameters(type)) { methodDescriptor.addParameter(parameter); methodName = method.getName(); MethodDescriptor<T> methodDescriptor = create(classDescriptor, methodName, method); methodMap.put(methodDescriptor.getName(), methodDescriptor); for (ParameterDescriptor parameter : parameters(type)) { classDescriptor.addParameter(parameter);
public static final CommandFactory DEFAULT = new CommandFactory();
private void assertIllegalValueType(Class<?> type) throws IntrospectionException { try { CommandFactory.DEFAULT.create(type); fail(); } catch (IllegalValueTypeException e) { } }
public GroovyScriptShellCommand(Class<T> clazz) throws IntrospectionException { // CommandFactory factory = new CommandFactory(getClass().getClassLoader()); boolean hasExplicitReturn; try { clazz.getDeclaredField(ScriptLastStatementTransformer.FIELD_NAME); hasExplicitReturn = true; } catch (NoSuchFieldException e) { hasExplicitReturn = false; } // this.clazz = clazz; this.descriptor = HelpDescriptor.create(factory.create(clazz)); this.hasExplicitReturn = hasExplicitReturn; }
private List<ParameterDescriptor> parameters(Class<?> introspected) throws IntrospectionException { List<ParameterDescriptor> parameters; Class<?> superIntrospected = introspected.getSuperclass(); if (superIntrospected == null) { parameters = new ArrayList<ParameterDescriptor>(); } else { parameters = parameters(superIntrospected); for (Field f : introspected.getDeclaredFields()) { Tuple tuple = get(f.getAnnotations()); ClassFieldBinding binding = new ClassFieldBinding(f); ParameterDescriptor parameter = create( binding, f.getGenericType(), tuple.argumentAnn, tuple.optionAnn, tuple.required, tuple.descriptionAnn, tuple.ann); if (parameter != null) { parameters.add(parameter); } } } return parameters; } }
public static final CommandFactory DEFAULT = new CommandFactory();
private void assertIllegalParameter(Class<?> type) throws IntrospectionException { try { CommandFactory.DEFAULT.create(type); fail(); } catch (IllegalParameterException e) { } } }
public void testArgumentProvidedValue() throws Exception { class A { Custom o; @Command public void foo(@Argument Custom o) { this.o = o; } } CommandDescriptor<Instance<A>> desc = new CommandFactory(CompleteTestCase.class.getClassLoader()).create(A.class); // CompletionMatcher<Instance<A>> matcher = desc.completer(); assertEquals(new CompletionMatch(Delimiter.EMPTY, Completion.create()), matcher.match("foo ")); } }
private List<ParameterDescriptor> parameters(Class<?> introspected) throws IntrospectionException { List<ParameterDescriptor> parameters; Class<?> superIntrospected = introspected.getSuperclass(); if (superIntrospected == null) { parameters = new ArrayList<ParameterDescriptor>(); } else { parameters = parameters(superIntrospected); for (Field f : introspected.getDeclaredFields()) { Tuple tuple = get(f.getAnnotations()); ClassFieldBinding binding = new ClassFieldBinding(f); ParameterDescriptor parameter = create( binding, f.getGenericType(), tuple.argumentAnn, tuple.optionAnn, tuple.required, tuple.descriptionAnn, tuple.ann); if (parameter != null) { parameters.add(parameter); } } } return parameters; } }
private static <T> void handle(Class<T> commandClass, String line) throws Exception { ObjectCommandDescriptor<T> descriptor = CommandFactory.DEFAULT.create(commandClass); HelpDescriptor<Instance<T>> helpDescriptor = HelpDescriptor.create(descriptor); InvocationMatcher<Instance<T>> matcher = helpDescriptor.matcher(); InvocationMatch<Instance<T>> match = matcher.parse(line); final T instance = commandClass.newInstance(); Object o = match.invoke(Util.wrap(instance)); if (o != null) { System.out.println(o); } } }
public void testValue() throws Exception { // CommandDescriptor<Instance<G>> desc = new CommandFactory(MatcherTestCase.class.getClassLoader()).create(G.class); // G g = new G(); desc.matcher().parse("foo -o a").invoke(Util.wrap(g)); assertEquals(new Custom("a"), g.o); g = new G(); desc.matcher().subordinate("foo").option("o", Collections.singletonList("a")).arguments(Collections.emptyList()).invoke(Util.wrap(g)); assertEquals(new Custom("a"), g.o); }