You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2024/04/11 13:04:51 UTC

(commons-cli) 05/05: Internal refactoring

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-cli.git

commit eefb1e20b3ec68f29aab174ea077d06e36ac144c
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Apr 11 09:04:40 2024 -0400

    Internal refactoring
---
 .../java/org/apache/commons/cli/DefaultParser.java | 14 +++++++----
 .../java/org/apache/commons/cli/GnuParser.java     | 27 +++++++++++-----------
 .../java/org/apache/commons/cli/PosixParser.java   |  2 +-
 .../apache/commons/cli/AbstractParserTestCase.java |  3 +--
 4 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/src/main/java/org/apache/commons/cli/DefaultParser.java b/src/main/java/org/apache/commons/cli/DefaultParser.java
index 64eba58..aa3a649 100644
--- a/src/main/java/org/apache/commons/cli/DefaultParser.java
+++ b/src/main/java/org/apache/commons/cli/DefaultParser.java
@@ -150,6 +150,10 @@ public class DefaultParser implements CommandLineParser {
         return new Builder();
     }
 
+    static int indexOfEqual(final String token) {
+        return token.indexOf(Char.EQUAL);
+    }
+
     /** The command-line instance. */
     protected CommandLine cmd;
 
@@ -358,7 +362,7 @@ public class DefaultParser implements CommandLineParser {
      * @param token the command line token to handle
      */
     private void handleLongOption(final String token) throws ParseException {
-        if (token.indexOf(Char.EQUAL) == -1) {
+        if (indexOfEqual(token) == -1) {
             handleLongOptionWithoutEqual(token);
         } else {
             handleLongOptionWithEqual(token);
@@ -373,7 +377,7 @@ public class DefaultParser implements CommandLineParser {
      * @param token the command line token to handle
      */
     private void handleLongOptionWithEqual(final String token) throws ParseException {
-        final int pos = token.indexOf(Char.EQUAL);
+        final int pos = indexOfEqual(token);
         final String value = token.substring(pos + 1);
         final String opt = token.substring(0, pos);
         final List<String> matchingOpts = getMatchingLongOptions(opt);
@@ -469,7 +473,7 @@ public class DefaultParser implements CommandLineParser {
      */
     private void handleShortAndLongOption(final String token) throws ParseException {
         final String t = Util.stripLeadingHyphens(token);
-        final int pos = t.indexOf(Char.EQUAL);
+        final int pos = indexOfEqual(t);
         if (t.length() == 1) {
             // -S
             if (options.hasShortOption(t)) {
@@ -600,7 +604,7 @@ public class DefaultParser implements CommandLineParser {
         if (token == null || !token.startsWith("-") || token.length() == 1) {
             return false;
         }
-        final int pos = token.indexOf(Char.EQUAL);
+        final int pos = indexOfEqual(token);
         final String t = pos == -1 ? token : token.substring(0, pos);
         if (!getMatchingLongOptions(t).isEmpty()) {
             // long or partial long options (--L, -L, --L=V, -L=V, --l, --l=V)
@@ -647,7 +651,7 @@ public class DefaultParser implements CommandLineParser {
             return false;
         }
         // remove leading "-" and "=value"
-        final int pos = token.indexOf(Char.EQUAL);
+        final int pos = indexOfEqual(token);
         final String optName = pos == -1 ? token.substring(1) : token.substring(1, pos);
         if (options.hasShortOption(optName)) {
             return true;
diff --git a/src/main/java/org/apache/commons/cli/GnuParser.java b/src/main/java/org/apache/commons/cli/GnuParser.java
index d96b7f6..20b4df3 100644
--- a/src/main/java/org/apache/commons/cli/GnuParser.java
+++ b/src/main/java/org/apache/commons/cli/GnuParser.java
@@ -45,12 +45,9 @@ public class GnuParser extends Parser {
     @Override
     protected String[] flatten(final Options options, final String[] arguments, final boolean stopAtNonOption) {
         final List<String> tokens = new ArrayList<>();
-
         boolean eatTheRest = false;
-
         for (int i = 0; i < arguments.length; i++) {
             final String arg = arguments[i];
-
             if ("--".equals(arg)) {
                 eatTheRest = true;
                 tokens.add("--");
@@ -58,20 +55,22 @@ public class GnuParser extends Parser {
                 tokens.add("-");
             } else if (arg.startsWith("-")) {
                 final String opt = Util.stripLeadingHyphens(arg);
-
                 if (options.hasOption(opt)) {
                     tokens.add(arg);
-                } else if (opt.indexOf(Char.EQUAL) != -1 && options.hasOption(opt.substring(0, opt.indexOf(Char.EQUAL)))) {
-                    // the format is --foo=value or -foo=value
-                    tokens.add(arg.substring(0, arg.indexOf(Char.EQUAL))); // --foo
-                    tokens.add(arg.substring(arg.indexOf(Char.EQUAL) + 1)); // value
-                } else if (options.hasOption(arg.substring(0, 2))) {
-                    // the format is a special properties option (-Dproperty=value)
-                    tokens.add(arg.substring(0, 2)); // -D
-                    tokens.add(arg.substring(2)); // property=value
                 } else {
-                    eatTheRest = stopAtNonOption;
-                    tokens.add(arg);
+                    final int equalPos = DefaultParser.indexOfEqual(opt);
+                    if (equalPos != -1 && options.hasOption(opt.substring(0, equalPos))) {
+                        // the format is --foo=value or -foo=value
+                        tokens.add(arg.substring(0, arg.indexOf(Char.EQUAL))); // --foo
+                        tokens.add(arg.substring(arg.indexOf(Char.EQUAL) + 1)); // value
+                    } else if (options.hasOption(arg.substring(0, 2))) {
+                        // the format is a special properties option (-Dproperty=value)
+                        tokens.add(arg.substring(0, 2)); // -D
+                        tokens.add(arg.substring(2)); // property=value
+                    } else {
+                        eatTheRest = stopAtNonOption;
+                        tokens.add(arg);
+                    }
                 }
             } else {
                 tokens.add(arg);
diff --git a/src/main/java/org/apache/commons/cli/PosixParser.java b/src/main/java/org/apache/commons/cli/PosixParser.java
index d5019e0..0071929 100644
--- a/src/main/java/org/apache/commons/cli/PosixParser.java
+++ b/src/main/java/org/apache/commons/cli/PosixParser.java
@@ -135,7 +135,7 @@ public class PosixParser extends Parser {
 
             // handle long option --foo or --foo=bar
             else if (token.startsWith("--")) {
-                final int pos = token.indexOf(Char.EQUAL);
+                final int pos = DefaultParser.indexOfEqual(token);
                 final String opt = pos == -1 ? token : token.substring(0, pos); // --foo
 
                 final List<String> matchingOpts = options.getMatchingOptions(opt);
diff --git a/src/test/java/org/apache/commons/cli/AbstractParserTestCase.java b/src/test/java/org/apache/commons/cli/AbstractParserTestCase.java
index d0e3efa..8c33fdd 100644
--- a/src/test/java/org/apache/commons/cli/AbstractParserTestCase.java
+++ b/src/test/java/org/apache/commons/cli/AbstractParserTestCase.java
@@ -697,10 +697,9 @@ public abstract class AbstractParserTestCase {
         final Properties properties = new Properties();
         properties.setProperty("k", "one,two");
 
-        final String[] values = { "one", "two" };
-
         final CommandLine cmd = parse(parser, options, null, properties);
         assertTrue(cmd.hasOption("k"));
+        final String[] values = { "one", "two" };
         assertArrayEquals(values, cmd.getOptionValues('k'));
     }