summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2017-04-07 06:50:42 -0700
committerCedric Beust <cedric@beust.com>2017-04-07 06:50:42 -0700
commitb3606c0bee31f8d2f37d0aae13152b3990b1e9df (patch)
tree33bf2f28505fb8d1a73966efda8468e35f19f7db
parentfadaa32e3113690dc0cdd0fe66cffeddaced9daf (diff)
downloadjcommander-b3606c0bee31f8d2f37d0aae13152b3990b1e9df.tar.gz
GH-337: Added the JCommander instance to ParameterException so you can call usage() on it.
Fixes https://github.com/cbeust/jcommander/issues/337
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java41
-rw-r--r--src/main/java/com/beust/jcommander/ParameterException.java18
2 files changed, 28 insertions, 31 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index 8fd455d..eff463a 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -18,42 +18,20 @@
package com.beust.jcommander;
+import com.beust.jcommander.FuzzyMap.IKey;
+import com.beust.jcommander.converters.*;
+import com.beust.jcommander.internal.*;
+
import java.io.BufferedReader;
import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
+import java.lang.reflect.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.EnumSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
import java.util.ResourceBundle;
import java.util.concurrent.CopyOnWriteArrayList;
-import com.beust.jcommander.FuzzyMap.IKey;
-import com.beust.jcommander.converters.DefaultListConverter;
-import com.beust.jcommander.converters.EnumConverter;
-import com.beust.jcommander.converters.IParameterSplitter;
-import com.beust.jcommander.converters.NoConverter;
-import com.beust.jcommander.converters.StringConverter;
-import com.beust.jcommander.internal.Console;
-import com.beust.jcommander.internal.DefaultConsole;
-import com.beust.jcommander.internal.DefaultConverterFactory;
-import com.beust.jcommander.internal.JDK6Console;
-import com.beust.jcommander.internal.Lists;
-import com.beust.jcommander.internal.Maps;
-import com.beust.jcommander.internal.Nullable;
-
/**
* The main class for JCommander. It's responsible for parsing the object that contains
* all the annotated fields, parse the command line and assign the fields with the correct
@@ -306,7 +284,12 @@ public class JCommander {
* Parse and validate the command line parameters.
*/
public void parse(String... args) {
- parse(true /* validate */, args);
+ try {
+ parse(true /* validate */, args);
+ } catch(ParameterException ex) {
+ ex.setJCommander(this);
+ throw ex;
+ }
}
/**
diff --git a/src/main/java/com/beust/jcommander/ParameterException.java b/src/main/java/com/beust/jcommander/ParameterException.java
index 2bba7d1..41570ff 100644
--- a/src/main/java/com/beust/jcommander/ParameterException.java
+++ b/src/main/java/com/beust/jcommander/ParameterException.java
@@ -26,7 +26,6 @@ package com.beust.jcommander;
*/
@SuppressWarnings("serial")
public class ParameterException extends RuntimeException {
-
public ParameterException(Throwable t) {
super(t);
}
@@ -37,6 +36,21 @@ public class ParameterException extends RuntimeException {
public ParameterException(String string, Throwable t) {
super(string, t);
- }
+ }
+
+ private JCommander jc;
+
+ public void setJCommander(JCommander jc) {
+ this.jc = jc;
+ }
+
+ public JCommander getJCommander() {
+ return jc;
+ }
+ public void usage() {
+ if (jc != null) {
+ jc.usage();
+ }
+ }
}