From d9641f6d1c47234ec18d6183bb9c294f6c8b3682 Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Mon, 27 Feb 2023 15:44:35 +0000 Subject: [PATCH] Wrong arity for default boolean type - Set boolean type arity zero or more as default. - Backport #675 - Fixes #677 --- .../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 580a5ac1..ca96ade2 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 @@ -152,10 +152,10 @@ public class StandardMethodTargetRegistrar implements MethodTargetRegistrar, App } 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); @@ -196,10 +196,10 @@ public class StandardMethodTargetRegistrar implements MethodTargetRegistrar, App .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 bb01e02d..d4222e16 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 @@ -416,16 +416,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 @@ -442,6 +455,10 @@ public class StandardMethodTargetRegistrarTests { @ShellMethod(value = "foo3") public void foo3(@ShellOption boolean arg1) { } + + @ShellMethod(value = "foo4") + public void foo4(boolean arg1) { + } } @Test