package org.kohsuke.args4j;
import org.kohsuke.args4j.spi.MethodSetter;
import org.kohsuke.args4j.spi.Setters;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Parser for analyzing Args4J annotations in the class hierarchy.
*
* This can be used to feed option bindings that span across multiple instances.
*
* @author Jan Materne
*/
public class ClassParser {
public void parse(Object bean, CmdLineParser parser) {
// recursively process all the methods/fields.
for( Class c=bean.getClass(); c!=null; c=c.getSuperclass()) {
for( Method m : c.getDeclaredMethods() ) {
Option o = m.getAnnotation(Option.class);
if(o!=null) {
parser.addOption(new MethodSetter(parser,bean,m), o);
}
Argument a = m.getAnnotation(Argument.class);
if(a!=null) {
parser.addArgument(new MethodSetter(parser,bean,m), a);
}
}
for( Field f : c.getDeclaredFields() ) {
Option o = f.getAnnotation(Option.class);
if(o!=null) {
parser.addOption(Setters.create(f,bean),o);
}
Argument a = f.getAnnotation(Argument.class);
if(a!=null) {
parser.addArgument(Setters.create(f,bean), a);
}
}
}
}
}