diff options
Diffstat (limited to 'src/main/java/com/beust/jcommander')
-rw-r--r-- | src/main/java/com/beust/jcommander/JCommander.java | 53 | ||||
-rw-r--r-- | src/main/java/com/beust/jcommander/ParameterDescription.java | 10 |
2 files changed, 28 insertions, 35 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java index a2d640a..67b8208 100644 --- a/src/main/java/com/beust/jcommander/JCommander.java +++ b/src/main/java/com/beust/jcommander/JCommander.java @@ -110,7 +110,7 @@ public class JCommander { /** * List of commands and their instance. */ - private Map<String, Object> m_commands = Maps.newHashMap(); + private Map<String, JCommander> m_commands = Maps.newHashMap(); /** * The name of the command after the parsing has run. @@ -518,15 +518,13 @@ public class JCommander { // // Command parsing // - Object o = m_commands.get(arg); - if (o == null) throw new ParameterException("Expected a command, got " + arg); + JCommander jc = m_commands.get(arg); + if (jc == null) throw new ParameterException("Expected a command, got " + arg); m_parsedCommand = arg; - // Found a valid command, create a new JCommander object with its - // description object and ask it to parse the remainder of the arguments. + // Found a valid command, ask it to parse the remainder of the arguments. // Setting the boolean commandParsed to true will force the current // loop to end. - JCommander jc = new JCommander(o); jc.parse(subArray(args, i + 1)); commandParsed = true; } @@ -610,20 +608,13 @@ public class JCommander { * Store the help for the command in the passed string builder. */ public void usage(String commandName, StringBuilder out) { - Object o = m_commands.get(commandName); - Object object; - try { - // Create a new object since o might have received values - // and might therefore display default values that are incorrect. - object = o.getClass().newInstance(); - JCommander jc = new JCommander(object); - jc.setProgramName(commandName); - jc.usage(); - } catch (InstantiationException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); + JCommander jc = m_commands.get(commandName); + String description = jc.getMainParameterDescription(); + if (description != null) { + out.append(description); + out.append("\n"); } + jc.usage(out); } /** @@ -688,17 +679,8 @@ public class JCommander { out.append(" " + (pd.getParameter().required() ? "* " : " ") + pd.getNames() + s(spaceCount) + pd.getDescription()); - try { - if (! pd.isAssigned()) { - Object def = pd.getField().get(pd.getObject()); - if (def != null) out.append(" (default: " + def + ")"); - } - } catch (IllegalArgumentException e) { - // ignore - } catch (IllegalAccessException e) { - // ignore - } - out.append("\n"); + Object def = pd.getDefault(); + if (def != null) out.append(" (default: " + def + ")"); out.append("\n"); } // @@ -707,11 +689,10 @@ public class JCommander { if (hasCommands) { out.append(" Commands:\n"); int ln = longestName(m_commands.keySet()) + 3; - for (Map.Entry<String, Object> commands : m_commands.entrySet()) { + for (Map.Entry<String, JCommander> commands : m_commands.entrySet()) { String name = commands.getKey(); int spaceCount = ln - name.length(); - Object o = commands.getValue(); - JCommander jc = new JCommander(o); + JCommander jc = commands.getValue(); out.append(" " + name + s(spaceCount) + jc.getMainParameterDescription() + "\n"); } } @@ -840,8 +821,10 @@ public class JCommander { /** * Add a command object. */ - public void addCommand(String string, Object object) { - m_commands.put(string, object); + public void addCommand(String name, Object object) { + JCommander jc = new JCommander(object); + jc.setProgramName(name); + m_commands.put(name, jc); } public String getParsedCommand() { diff --git a/src/main/java/com/beust/jcommander/ParameterDescription.java b/src/main/java/com/beust/jcommander/ParameterDescription.java index 015a897..f265cae 100644 --- a/src/main/java/com/beust/jcommander/ParameterDescription.java +++ b/src/main/java/com/beust/jcommander/ParameterDescription.java @@ -37,6 +37,7 @@ public class ParameterDescription { private ResourceBundle m_bundle; private String m_description; private JCommander m_jCommander; + private Object m_default; public ParameterDescription(Object object, Parameter annotation, Field field, ResourceBundle bundle, JCommander jc) { @@ -89,6 +90,15 @@ public class ParameterDescription { // "default description:'" + m_description + "'"); } } + + try { + m_default = m_field.get(m_object); + } catch (Exception e) { + } + } + + public Object getDefault() { + return m_default; } public String getDescription() { |