From be083ea4089a0e1a781eeb22b8c2927c5b698f2f Mon Sep 17 00:00:00 2001 From: Lucaslg7 Date: Sat, 24 Oct 2026 15:06:34 -0300 Subject: [PATCH] refactor: replace redundant parser comments with descriptive names --- .../java/org/apache/commons/cli/Parser.java | 20 +++++++------------ .../commons/cli/AbstractParserTestCase.java | 13 ++++++++++++ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/apache/commons/cli/Parser.java b/src/main/java/org/apache/commons/cli/Parser.java index d120ea212..632abec6a 100644 --- a/src/main/java/org/apache/commons/cli/Parser.java +++ b/src/main/java/org/apache/commons/cli/Parser.java @@ -47,7 +47,6 @@ public abstract class Parser implements CommandLineParser { * Constructs a new instance. */ public Parser() { - // empty } /** @@ -245,21 +244,16 @@ public void processArgs(final Option opt, final ListIterator iter) throw * @throws ParseException if {@code arg} does not represent an Option. */ protected void processOption(final String arg, final ListIterator iter) throws ParseException { - final boolean hasOption = getOptions().hasOption(arg); - // if there is no option throw an UnrecognizedOptionException - if (!hasOption) { + final boolean optionIsRecognized = getOptions().hasOption(arg); + if (!optionIsRecognized) { throw new UnrecognizedOptionException("Unrecognized option: " + arg, arg); } - // get the option represented by arg - final Option opt = (Option) getOptions().getOption(arg).clone(); - // update the required options and groups - updateRequiredOptions(opt); - // if the option takes an argument value - if (opt.hasArg()) { - processArgs(opt, iter); + final Option optionToProcess = (Option) getOptions().getOption(arg).clone(); + updateRequiredOptions(optionToProcess); + if (optionToProcess.hasArg()) { + processArgs(optionToProcess, iter); } - // set the option on the command line - cmd.addOption(opt); + cmd.addOption(optionToProcess); } /** diff --git a/src/test/java/org/apache/commons/cli/AbstractParserTestCase.java b/src/test/java/org/apache/commons/cli/AbstractParserTestCase.java index 58657821a..f15ef4747 100644 --- a/src/test/java/org/apache/commons/cli/AbstractParserTestCase.java +++ b/src/test/java/org/apache/commons/cli/AbstractParserTestCase.java @@ -21,6 +21,7 @@ Licensed to the Apache Software Foundation (ASF) under one or more import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -187,6 +188,18 @@ void testLongOptionQuoteHandling() throws Exception { assertEquals("quoted string", cl.getOptionValue("b"), "Confirm --bfile \"arg\" strips quotes"); } + @Test + void testParsedArgumentIsStoredOnOptionClone() throws Exception { + final Option option = Option.builder("b").hasArg().get(); + final Options options = new Options().addOption(option); + final CommandLine commandLine = parser.parse(options, new String[] { "-b", "value" }); + final Option parsedOption = commandLine.getOptions()[0]; + + assertNotSame(option, parsedOption); + assertEquals("value", parsedOption.getValue()); + assertTrue(option.isValuesEmpty()); + } + @Test void testLongOptionWithEqualsQuoteHandling() throws Exception { final String[] args = { "--bfile=\"quoted string\"" };