summaryrefslogtreecommitdiff
path: root/src/main/java/com/beust/jcommander/JCommander.java
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2017-01-24 12:46:34 -0800
committerCedric Beust <cedric@beust.com>2017-01-24 12:46:34 -0800
commit113ba56cd5ced2168926400ee57bcc61b0d2117d (patch)
tree25559135e48d1bf310149e8b44c3fa7f91eff19a /src/main/java/com/beust/jcommander/JCommander.java
parentd83e20831cf9f62e015b2362abb62b8908a07332 (diff)
downloadjcommander-113ba56cd5ced2168926400ee57bcc61b0d2117d.tar.gz
Remove the need for option prefixes.
Diffstat (limited to 'src/main/java/com/beust/jcommander/JCommander.java')
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java104
1 files changed, 45 insertions, 59 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index 65bc972..0123849 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
@@ -431,9 +409,44 @@ public class JCommander {
return Arrays.asList(arg);
}
- private boolean isOption(String arg) {
- String prefixes = getOptionPrefixes(arg);
- return arg.length() > 0 && prefixes.indexOf(arg.charAt(0)) >= 0;
+ private boolean matchArg(String arg, IKey key) {
+ String kn = options.m_caseSensitiveOptions
+ ? key.getName()
+ : key.getName().toLowerCase();
+ if (options.m_allowAbbreviatedOptions) {
+ if (kn.startsWith(arg)) return true;
+ } else {
+ ParameterDescription pd = m_descriptions.get(key);
+ if (pd != null) {
+ // It's an option. If the option has a separator (e.g. -author==foo) then
+ // we only do a beginsWith match
+ String separator = getSeparatorFor(arg);
+ if (! " ".equals(separator)) {
+ if (arg.startsWith(kn)) return true;
+ } else {
+ if (kn.equals(arg)) return true;
+ }
+ } else {
+ // It's a command do a strict equality check
+ if (kn.equals(arg)) return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isOption(String passedArg) {
+ if (options.m_acceptUnknownOptions) return true;
+
+ String arg = options.m_caseSensitiveOptions ? passedArg : passedArg.toLowerCase();
+
+ for (IKey key : m_descriptions.keySet()) {
+ if (matchArg(arg, key)) return true;
+ }
+ for (IKey key : m_commands.keySet()) {
+ if (matchArg(arg, key)) return true;
+ }
+
+ return false;
}
private ParameterDescription getPrefixDescriptionFor(String arg) {
@@ -464,33 +477,6 @@ public class JCommander {
return " ";
}
- private String getOptionPrefixes(String arg) {
- ParameterDescription pd = getDescriptionFor(arg);
-
- // Could be null if only main parameters were passed
- if (pd != null) {
- Parameters p = pd.getObject().getClass()
- .getAnnotation(Parameters.class);
- if (p != null) return p.optionPrefixes();
- }
- String result = Parameters.DEFAULT_OPTION_PREFIXES;
-
- // See if any of the objects contains a @Parameters(optionPrefixes)
- StringBuilder sb = new StringBuilder();
- for (Object o : m_objects) {
- Parameters p = o.getClass().getAnnotation(Parameters.class);
- if (p != null && !Parameters.DEFAULT_OPTION_PREFIXES.equals(p.optionPrefixes())) {
- sb.append(p.optionPrefixes());
- }
- }
-
- if (!Strings.isStringEmpty(sb.toString())) {
- result = sb.toString();
- }
-
- return result;
- }
-
/**
* Reads the file specified by filename and returns the file content as a string.
* End of lines are replaced by a space.
@@ -854,7 +840,7 @@ public class JCommander {
private List<?> getMainParameter(String arg) {
if (m_mainParameter == null) {
throw new ParameterException(
- "Was passed main parameter '" + arg + "' but no main parameter was defined");
+ "Was passed main parameter '" + arg + "' but no main parameter was defined in your arg class");
}
List<?> result = (List<?>) m_mainParameter.get(m_mainParameterObject);