Skip to content

Commit fe6dbce

Browse files
committed
Fill array values before setting them as value
1 parent 7b6ea15 commit fe6dbce

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

src/main/java/picocli/CommandLine.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7227,10 +7227,10 @@ private int applyValuesToArrayField(ArgSpec argSpec,
72277227
}
72287228
}
72297229
Object array = Array.newInstance(type, newValues.size());
7230-
argSpec.setValue(array, commandSpec.commandLine());
72317230
for (int i = 0; i < newValues.size(); i++) {
72327231
Array.set(array, i, newValues.get(i));
72337232
}
7233+
argSpec.setValue(array, commandSpec.commandLine());
72347234
parseResult.add(argSpec, position);
72357235
return converted.size(); // return how many args were consumed
72367236
}

src/test/java/picocli/CommandLineTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,38 @@ class ArrayPositionalParams {
195195
assertNotSame(array, params.array);
196196
assertArrayEquals(new int[]{3, 2, 1}, params.array);
197197
}
198+
@Test
199+
public void testArrayPositionalParametersAreFilledWithValues() {
200+
@Command
201+
class ArrayPositionalParams {
202+
String string;
203+
@Parameters()
204+
void setString( String[] array) {
205+
StringBuilder sb = new StringBuilder();
206+
for (String s : array) { sb.append(s); }
207+
string = sb.toString();
208+
}
209+
}
210+
ArrayPositionalParams params = new ArrayPositionalParams();
211+
new CommandLine(params).parse("foo", "bar", "baz");
212+
assertEquals("foobarbaz", params.string);
213+
}
214+
@Test
215+
public void testArrayOptionsAreFilledWithValues() {
216+
@Command
217+
class ArrayPositionalParams {
218+
String string;
219+
@Option(names="-s")
220+
void setString( String[] array) {
221+
StringBuilder sb = new StringBuilder();
222+
for (String s : array) { sb.append(s); }
223+
string = sb.toString();
224+
}
225+
}
226+
ArrayPositionalParams params = new ArrayPositionalParams();
227+
new CommandLine(params).parse("-s", "foo", "-s", "bar", "-s", "baz");
228+
assertEquals("foobarbaz", params.string);
229+
}
198230
private class ListPositionalParams {
199231
@Parameters(type = Integer.class) List<Integer> list;
200232
}

0 commit comments

Comments
 (0)