diff options
author | Cedric Beust <cedric@beust.com> | 2017-01-24 12:46:34 -0800 |
---|---|---|
committer | Cedric Beust <cedric@beust.com> | 2017-01-24 12:46:34 -0800 |
commit | 113ba56cd5ced2168926400ee57bcc61b0d2117d (patch) | |
tree | 25559135e48d1bf310149e8b44c3fa7f91eff19a /src/main/java/com/beust/jcommander/JCommander.java | |
parent | d83e20831cf9f62e015b2362abb62b8908a07332 (diff) | |
download | jcommander-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.java | 104 |
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); |