Skip to content

Commit db4a638

Browse files
committed
Fixed testStopAtExpectedArg for PosixParser
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/cli/branches/cli-1.x@695760 13f79535-47bb-0310-9956-ffa450edef68
1 parent ae2ff1d commit db4a638

1 file changed

Lines changed: 23 additions & 19 deletions

File tree

src/java/org/apache/commons/cli/PosixParser.java

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public class PosixParser extends Parser
3737
/** specifies if bursting should continue */
3838
private boolean eatTheRest;
3939

40+
/** holder for the current option */
41+
private Option currentOption;
42+
4043
/** the command line Options */
4144
private Options options;
4245

@@ -109,12 +112,14 @@ protected String[] flatten(Options options, String[] arguments, boolean stopAtNo
109112
int pos = token.indexOf('=');
110113
String opt = pos == -1 ? token : token.substring(0, pos); // --foo
111114

112-
if (!options.hasOption(opt) && stopAtNonOption)
115+
if (!options.hasOption(opt))
113116
{
114-
processNonOptionToken(token);
117+
processNonOptionToken(token, stopAtNonOption);
115118
}
116119
else
117120
{
121+
currentOption = options.getOption(opt);
122+
118123
tokens.add(opt);
119124
if (pos != -1)
120125
{
@@ -130,27 +135,19 @@ else if ("-".equals(token))
130135
}
131136
else if (token.startsWith("-"))
132137
{
133-
if (token.length() == 2)
138+
if (token.length() == 2 || options.hasOption(token))
134139
{
135140
processOptionToken(token, stopAtNonOption);
136141
}
137-
else if (options.hasOption(token))
138-
{
139-
tokens.add(token);
140-
}
141142
// requires bursting
142143
else
143144
{
144145
burstToken(token, stopAtNonOption);
145146
}
146147
}
147-
else if (stopAtNonOption)
148-
{
149-
processNonOptionToken(token);
150-
}
151148
else
152149
{
153-
tokens.add(token);
150+
processNonOptionToken(token, stopAtNonOption);
154151
}
155152

156153
gobble(iter);
@@ -182,10 +179,14 @@ private void gobble(Iterator iter)
182179
*
183180
* @param value The current token
184181
*/
185-
private void processNonOptionToken(String value)
182+
private void processNonOptionToken(String value, boolean stopAtNonOption)
186183
{
187-
eatTheRest = true;
188-
tokens.add("--");
184+
if (stopAtNonOption && (currentOption == null || !currentOption.hasArg()))
185+
{
186+
eatTheRest = true;
187+
tokens.add("--");
188+
}
189+
189190
tokens.add(value);
190191
}
191192

@@ -203,11 +204,16 @@ private void processNonOptionToken(String value)
203204
*/
204205
private void processOptionToken(String token, boolean stopAtNonOption)
205206
{
206-
if (!options.hasOption(token) && stopAtNonOption)
207+
if (stopAtNonOption && !options.hasOption(token))
207208
{
208209
eatTheRest = true;
209210
}
210211

212+
if (options.hasOption(token))
213+
{
214+
currentOption = options.getOption(token);
215+
}
216+
211217
tokens.add(token);
212218
}
213219

@@ -239,8 +245,6 @@ private void processOptionToken(String token, boolean stopAtNonOption)
239245
*/
240246
protected void burstToken(String token, boolean stopAtNonOption)
241247
{
242-
Option currentOption;
243-
244248
for (int i = 1; i < token.length(); i++)
245249
{
246250
String ch = String.valueOf(token.charAt(i));
@@ -259,7 +263,7 @@ protected void burstToken(String token, boolean stopAtNonOption)
259263
}
260264
else if (stopAtNonOption)
261265
{
262-
processNonOptionToken(token.substring(i));
266+
processNonOptionToken(token.substring(i), true);
263267
break;
264268
}
265269
else

0 commit comments

Comments
 (0)