summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/beust/jcommander
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2010-08-16 21:45:23 -0700
committerCedric Beust <cedric@beust.com>2010-08-16 21:45:23 -0700
commitb89d58db97bc7514cc20f6758f413088aea5672d (patch)
treee0f8eae7fdcf29fab60d3e7f59eefcc9a4ef4c68 /src/main/java/com/beust/jcommander
parent0bf62c0269798a001ef93dcf9bb9776a95f6052f (diff)
downloadplatform_external_jcommander-b89d58db97bc7514cc20f6758f413088aea5672d.tar.gz
platform_external_jcommander-b89d58db97bc7514cc20f6758f413088aea5672d.tar.bz2
platform_external_jcommander-b89d58db97bc7514cc20f6758f413088aea5672d.zip
Applied jstrachan's patch for usage
Diffstat (limited to 'src/main/java/com/beust/jcommander')
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java53
-rw-r--r--src/main/java/com/beust/jcommander/ParameterDescription.java10
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() {