Skip to content

Commit b0e9a13

Browse files
committed
Wrong arity for default boolean type
- Set boolean type arity zero or more as default. - Backport #675 - Fixes #678
1 parent c91db35 commit b0e9a13

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,10 @@ else if ("-".equals(shellMapping.prefix()) && stripped.length() == 1) {
157157
}
158158
else {
159159
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
160-
optionSpec.arity(OptionArity.ZERO);
160+
optionSpec.arity(OptionArity.ZERO_OR_ONE);
161161
}
162162
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
163-
optionSpec.arity(OptionArity.ZERO);
163+
optionSpec.arity(OptionArity.ZERO_OR_ONE);
164164
}
165165
else {
166166
optionSpec.arity(OptionArity.EXACTLY_ONE);
@@ -201,10 +201,10 @@ else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
201201
.required()
202202
.position(mp.getParameterIndex());
203203
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
204-
optionSpec.arity(OptionArity.ZERO);
204+
optionSpec.arity(OptionArity.ZERO_OR_ONE);
205205
}
206206
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
207-
optionSpec.arity(OptionArity.ZERO);
207+
optionSpec.arity(OptionArity.ZERO_OR_ONE);
208208
}
209209
else {
210210
optionSpec.arity(OptionArity.EXACTLY_ONE);

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

+17
Original file line numberDiff line numberDiff line change
@@ -417,16 +417,29 @@ public void testOptionValuesWithBoolean() {
417417
assertThat(catalog.getRegistrations().get("foo1").getOptions()).hasSize(1);
418418
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getDefaultValue()).isEqualTo("false");
419419
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).isRequired()).isFalse();
420+
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getArityMin()).isEqualTo(0);
421+
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getArityMax()).isEqualTo(1);
420422

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

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

432445
@ShellComponent
@@ -443,6 +456,10 @@ public void foo2(@ShellOption(defaultValue = "true") boolean arg1) {
443456
@ShellMethod(value = "foo3")
444457
public void foo3(@ShellOption boolean arg1) {
445458
}
459+
460+
@ShellMethod(value = "foo4")
461+
public void foo4(boolean arg1) {
462+
}
446463
}
447464

448465
@Test

0 commit comments

Comments
 (0)