diff --git a/public/java/src/org/broadinstitute/sting/commandline/ArgumentSource.java b/public/java/src/org/broadinstitute/sting/commandline/ArgumentSource.java index 3e149b0c6..8ec0d650a 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/ArgumentSource.java +++ b/public/java/src/org/broadinstitute/sting/commandline/ArgumentSource.java @@ -39,7 +39,7 @@ import java.util.List; * @author mhanna * @version 0.1 */ -public class ArgumentSource implements Comparable { +public class ArgumentSource { /** * Field into which to inject command-line arguments. */ @@ -216,9 +216,4 @@ public class ArgumentSource implements Comparable { public String toString() { return field.getDeclaringClass().getSimpleName() + ": " + field.getName(); } - - @Override - public int compareTo(final ArgumentSource argumentSource) { - return field.getName().toLowerCase().compareTo(argumentSource.field.getName().toLowerCase()); - } } diff --git a/public/java/src/org/broadinstitute/sting/utils/help/GenericDocumentationHandler.java b/public/java/src/org/broadinstitute/sting/utils/help/GenericDocumentationHandler.java index ff57bb744..d7add9af0 100644 --- a/public/java/src/org/broadinstitute/sting/utils/help/GenericDocumentationHandler.java +++ b/public/java/src/org/broadinstitute/sting/utils/help/GenericDocumentationHandler.java @@ -111,16 +111,16 @@ public class GenericDocumentationHandler extends DocumentedGATKFeatureHandler { // attempt to instantiate the class Object instance = makeInstanceIfPossible(toProcess.clazz); - Map> args = new HashMap>(); + Map>> args = new HashMap>>(); root.put("arguments", args); - args.put("all", new ArrayList()); - args.put("required", new ArrayList()); - args.put("optional", new ArrayList()); - args.put("advanced", new ArrayList()); - args.put("hidden", new ArrayList()); - args.put("depreciated", new ArrayList()); + args.put("all", new ArrayList>()); + args.put("required", new ArrayList>()); + args.put("optional", new ArrayList>()); + args.put("advanced", new ArrayList>()); + args.put("hidden", new ArrayList>()); + args.put("depreciated", new ArrayList>()); try { - for ( ArgumentSource argumentSource : new TreeSet(parsingEngine.extractArgumentSources(HelpUtils.getClassForDoc(classdoc))) ) { + for ( ArgumentSource argumentSource : parsingEngine.extractArgumentSources(HelpUtils.getClassForDoc(classdoc)) ) { ArgumentDefinition argDef = argumentSource.createArgumentDefinitions().get(0); FieldDoc fieldDoc = getFieldDoc(classdoc, argumentSource.field.getName()); Map argBindings = docForArgument(fieldDoc, argumentSource, argDef); // todo -- why can you have multiple ones? @@ -155,11 +155,37 @@ public class GenericDocumentationHandler extends DocumentedGATKFeatureHandler { logger.debug(String.format("Skipping hidden feature %s", argumentSource)); } } + + // sort the arguments + for (Map.Entry>> entry : args.entrySet()) { + entry.setValue(sortArguments(entry.getValue())); + } } catch ( ClassNotFoundException e ) { throw new RuntimeException(e); } } + private List> sortArguments(List> unsorted) { + Collections.sort(unsorted, new CompareArgumentsByName()); + return unsorted; + } + + private class CompareArgumentsByName implements Comparator> { + public int compare(Map x, Map y) { + return elt(x).compareTo(elt(y)); + } + + private String elt(Map m) { + String v = m.get("name").toString().toLowerCase(); + if ( v.startsWith("--") ) + return v.substring(2); + else if ( v.startsWith("-") ) + return v.substring(1); + else + throw new RuntimeException("Expect to see arguments beginning with at least one -, but found " + v); + } + } + private Object getFieldValue(Class c, Object instance, String fieldName) { Field field = JVMUtils.findField(c, fieldName); if ( field != null ) {