Skip to content

Commit d9641f6

Browse files
committed
Wrong arity for default boolean type
- Set boolean type arity zero or more as default. - Backport #675 - Fixes #677
1 parent 339b43b commit d9641f6

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardMethodTargetRegistrar.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,10 @@ else if ("-".equals(shellMapping.prefix()) && stripped.length() == 1) {
152152
}
153153
else {
154154
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
155-
optionSpec.arity(OptionArity.ZERO);
155+
optionSpec.arity(OptionArity.ZERO_OR_ONE);
156156
}
157157
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
158-
optionSpec.arity(OptionArity.ZERO);
158+
optionSpec.arity(OptionArity.ZERO_OR_ONE);
159159
}
160160
else {
161161
optionSpec.arity(OptionArity.EXACTLY_ONE);
@@ -196,10 +196,10 @@ else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
196196
.required()
197197
.position(mp.getParameterIndex());
198198
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
199-
optionSpec.arity(OptionArity.ZERO);
199+
optionSpec.arity(OptionArity.ZERO_OR_ONE);
200200
}
201201
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
202-
optionSpec.arity(OptionArity.ZERO);
202+
optionSpec.arity(OptionArity.ZERO_OR_ONE);
203203
}
204204
else {
205205
optionSpec.arity(OptionArity.EXACTLY_ONE);

spring-shell-standard/src/test/java/org/springframework/shell/standard/StandardMethodTargetRegistrarTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,16 +416,29 @@ public void testOptionValuesWithBoolean() {
416416
assertThat(catalog.getRegistrations().get("foo1").getOptions()).hasSize(1);
417417
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getDefaultValue()).isEqualTo("false");
418418
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).isRequired()).isFalse();
419+
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getArityMin()).isEqualTo(0);
420+
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getArityMax()).isEqualTo(1);
419421

420422
assertThat(catalog.getRegistrations().get("foo2")).isNotNull();
421423
assertThat(catalog.getRegistrations().get("foo2").getOptions()).hasSize(1);
422424
assertThat(catalog.getRegistrations().get("foo2").getOptions().get(0).getDefaultValue()).isEqualTo("true");
423425
assertThat(catalog.getRegistrations().get("foo2").getOptions().get(0).isRequired()).isFalse();
426+
assertThat(catalog.getRegistrations().get("foo2").getOptions().get(0).getArityMin()).isEqualTo(0);
427+
assertThat(catalog.getRegistrations().get("foo2").getOptions().get(0).getArityMax()).isEqualTo(1);
424428

425429
assertThat(catalog.getRegistrations().get("foo3")).isNotNull();
426430
assertThat(catalog.getRegistrations().get("foo3").getOptions()).hasSize(1);
427431
assertThat(catalog.getRegistrations().get("foo3").getOptions().get(0).isRequired()).isFalse();
428432
assertThat(catalog.getRegistrations().get("foo3").getOptions().get(0).getDefaultValue()).isEqualTo("false");
433+
assertThat(catalog.getRegistrations().get("foo3").getOptions().get(0).getArityMin()).isEqualTo(0);
434+
assertThat(catalog.getRegistrations().get("foo3").getOptions().get(0).getArityMax()).isEqualTo(1);
435+
436+
assertThat(catalog.getRegistrations().get("foo4")).isNotNull();
437+
assertThat(catalog.getRegistrations().get("foo4").getOptions()).hasSize(1);
438+
assertThat(catalog.getRegistrations().get("foo4").getOptions().get(0).isRequired()).isTrue();
439+
assertThat(catalog.getRegistrations().get("foo4").getOptions().get(0).getDefaultValue()).isNull();
440+
assertThat(catalog.getRegistrations().get("foo4").getOptions().get(0).getArityMin()).isEqualTo(0);
441+
assertThat(catalog.getRegistrations().get("foo4").getOptions().get(0).getArityMax()).isEqualTo(1);
429442
}
430443

431444
@ShellComponent
@@ -442,6 +455,10 @@ public void foo2(@ShellOption(defaultValue = "true") boolean arg1) {
442455
@ShellMethod(value = "foo3")
443456
public void foo3(@ShellOption boolean arg1) {
444457
}
458+
459+
@ShellMethod(value = "foo4")
460+
public void foo4(boolean arg1) {
461+
}
445462
}
446463

447464
@Test

0 commit comments

Comments
 (0)