From b0e9a13be0c2ab85f07ad3a90ee4819baabf92cd Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Mon, 27 Feb 2023 15:41:08 +0000 Subject: [PATCH] Wrong arity for default boolean type - Set boolean type arity zero or more as default. - Backport #675 - Fixes #678 --- .../standard/StandardMethodTargetRegistrar.java | 8 ++++---- .../StandardMethodTargetRegistrarTests.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardMethodTargetRegistrar.java b/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardMethodTargetRegistrar.java index c19d4018..c75cda74 100644 --- a/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardMethodTargetRegistrar.java +++ b/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardMethodTargetRegistrar.java @@ -157,10 +157,10 @@ public class StandardMethodTargetRegistrar implements MethodTargetRegistrar { } else { if (ClassUtils.isAssignable(boolean.class, parameterType)) { - optionSpec.arity(OptionArity.ZERO); + optionSpec.arity(OptionArity.ZERO_OR_ONE); } else if (ClassUtils.isAssignable(Boolean.class, parameterType)) { - optionSpec.arity(OptionArity.ZERO); + optionSpec.arity(OptionArity.ZERO_OR_ONE); } else { optionSpec.arity(OptionArity.EXACTLY_ONE); @@ -201,10 +201,10 @@ public class StandardMethodTargetRegistrar implements MethodTargetRegistrar { .required() .position(mp.getParameterIndex()); if (ClassUtils.isAssignable(boolean.class, parameterType)) { - optionSpec.arity(OptionArity.ZERO); + optionSpec.arity(OptionArity.ZERO_OR_ONE); } else if (ClassUtils.isAssignable(Boolean.class, parameterType)) { - optionSpec.arity(OptionArity.ZERO); + optionSpec.arity(OptionArity.ZERO_OR_ONE); } else { optionSpec.arity(OptionArity.EXACTLY_ONE); diff --git a/spring-shell-standard/src/test/java/org/springframework/shell/standard/StandardMethodTargetRegistrarTests.java b/spring-shell-standard/src/test/java/org/springframework/shell/standard/StandardMethodTargetRegistrarTests.java index fe7885e6..5c86113a 100644 --- a/spring-shell-standard/src/test/java/org/springframework/shell/standard/StandardMethodTargetRegistrarTests.java +++ b/spring-shell-standard/src/test/java/org/springframework/shell/standard/StandardMethodTargetRegistrarTests.java @@ -417,16 +417,29 @@ public class StandardMethodTargetRegistrarTests { assertThat(catalog.getRegistrations().get("foo1").getOptions()).hasSize(1); assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getDefaultValue()).isEqualTo("false"); assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).isRequired()).isFalse(); + assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getArityMin()).isEqualTo(0); + assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getArityMax()).isEqualTo(1); assertThat(catalog.getRegistrations().get("foo2")).isNotNull(); assertThat(catalog.getRegistrations().get("foo2").getOptions()).hasSize(1); assertThat(catalog.getRegistrations().get("foo2").getOptions().get(0).getDefaultValue()).isEqualTo("true"); assertThat(catalog.getRegistrations().get("foo2").getOptions().get(0).isRequired()).isFalse(); + assertThat(catalog.getRegistrations().get("foo2").getOptions().get(0).getArityMin()).isEqualTo(0); + assertThat(catalog.getRegistrations().get("foo2").getOptions().get(0).getArityMax()).isEqualTo(1); assertThat(catalog.getRegistrations().get("foo3")).isNotNull(); assertThat(catalog.getRegistrations().get("foo3").getOptions()).hasSize(1); assertThat(catalog.getRegistrations().get("foo3").getOptions().get(0).isRequired()).isFalse(); assertThat(catalog.getRegistrations().get("foo3").getOptions().get(0).getDefaultValue()).isEqualTo("false"); + assertThat(catalog.getRegistrations().get("foo3").getOptions().get(0).getArityMin()).isEqualTo(0); + assertThat(catalog.getRegistrations().get("foo3").getOptions().get(0).getArityMax()).isEqualTo(1); + + assertThat(catalog.getRegistrations().get("foo4")).isNotNull(); + assertThat(catalog.getRegistrations().get("foo4").getOptions()).hasSize(1); + assertThat(catalog.getRegistrations().get("foo4").getOptions().get(0).isRequired()).isTrue(); + assertThat(catalog.getRegistrations().get("foo4").getOptions().get(0).getDefaultValue()).isNull(); + assertThat(catalog.getRegistrations().get("foo4").getOptions().get(0).getArityMin()).isEqualTo(0); + assertThat(catalog.getRegistrations().get("foo4").getOptions().get(0).getArityMax()).isEqualTo(1); } @ShellComponent @@ -443,6 +456,10 @@ public class StandardMethodTargetRegistrarTests { @ShellMethod(value = "foo3") public void foo3(@ShellOption boolean arg1) { } + + @ShellMethod(value = "foo4") + public void foo4(boolean arg1) { + } } @Test