Wrong arity for default boolean type
- Set boolean type arity zero or more as default. - Fixes #675
This commit is contained in:
@@ -255,10 +255,10 @@ class CommandRegistrationFactoryBean implements FactoryBean<CommandRegistration>
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
|
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
|
||||||
optionSpec.arity(OptionArity.ZERO);
|
optionSpec.arity(OptionArity.ZERO_OR_ONE);
|
||||||
}
|
}
|
||||||
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
|
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
|
||||||
optionSpec.arity(OptionArity.ZERO);
|
optionSpec.arity(OptionArity.ZERO_OR_ONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,10 +298,10 @@ class CommandRegistrationFactoryBean implements FactoryBean<CommandRegistration>
|
|||||||
optionSpec.required();
|
optionSpec.required();
|
||||||
optionSpec.position(mp.getParameterIndex());
|
optionSpec.position(mp.getParameterIndex());
|
||||||
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
|
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
|
||||||
optionSpec.arity(OptionArity.ZERO);
|
optionSpec.arity(OptionArity.ZERO_OR_ONE);
|
||||||
}
|
}
|
||||||
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
|
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
|
||||||
optionSpec.arity(OptionArity.ZERO);
|
optionSpec.arity(OptionArity.ZERO_OR_ONE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
optionSpec.arity(OptionArity.EXACTLY_ONE);
|
optionSpec.arity(OptionArity.EXACTLY_ONE);
|
||||||
|
|||||||
@@ -144,6 +144,71 @@ class CommandRegistrationFactoryBeanTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void setsOptionValuesWithBoolean() {
|
||||||
|
configCommon(OptionValuesWithBoolean.class, new OptionValuesWithBoolean(), "command1", new Class[] { boolean.class })
|
||||||
|
.run((context) -> {
|
||||||
|
CommandRegistrationFactoryBean fb = context.getBean(FACTORYBEANREF,
|
||||||
|
CommandRegistrationFactoryBean.class);
|
||||||
|
assertThat(fb).isNotNull();
|
||||||
|
CommandRegistration registration = fb.getObject();
|
||||||
|
assertThat(registration).isNotNull();
|
||||||
|
assertThat(registration.getOptions().get(0).getArityMin()).isEqualTo(0);
|
||||||
|
assertThat(registration.getOptions().get(0).getArityMax()).isEqualTo(1);
|
||||||
|
});
|
||||||
|
configCommon(OptionValuesWithBoolean.class, new OptionValuesWithBoolean(), "command2", new Class[] { Boolean.class })
|
||||||
|
.run((context) -> {
|
||||||
|
CommandRegistrationFactoryBean fb = context.getBean(FACTORYBEANREF,
|
||||||
|
CommandRegistrationFactoryBean.class);
|
||||||
|
assertThat(fb).isNotNull();
|
||||||
|
CommandRegistration registration = fb.getObject();
|
||||||
|
assertThat(registration).isNotNull();
|
||||||
|
assertThat(registration.getOptions().get(0).getArityMin()).isEqualTo(0);
|
||||||
|
assertThat(registration.getOptions().get(0).getArityMax()).isEqualTo(1);
|
||||||
|
});
|
||||||
|
configCommon(OptionValuesWithBoolean.class, new OptionValuesWithBoolean(), "command3", new Class[] { Boolean.class })
|
||||||
|
.run((context) -> {
|
||||||
|
CommandRegistrationFactoryBean fb = context.getBean(FACTORYBEANREF,
|
||||||
|
CommandRegistrationFactoryBean.class);
|
||||||
|
assertThat(fb).isNotNull();
|
||||||
|
CommandRegistration registration = fb.getObject();
|
||||||
|
assertThat(registration).isNotNull();
|
||||||
|
assertThat(registration.getOptions().get(0).getArityMin()).isEqualTo(0);
|
||||||
|
assertThat(registration.getOptions().get(0).getArityMax()).isEqualTo(1);
|
||||||
|
});
|
||||||
|
configCommon(OptionValuesWithBoolean.class, new OptionValuesWithBoolean(), "command4", new Class[] { Boolean.class })
|
||||||
|
.run((context) -> {
|
||||||
|
CommandRegistrationFactoryBean fb = context.getBean(FACTORYBEANREF,
|
||||||
|
CommandRegistrationFactoryBean.class);
|
||||||
|
assertThat(fb).isNotNull();
|
||||||
|
CommandRegistration registration = fb.getObject();
|
||||||
|
assertThat(registration).isNotNull();
|
||||||
|
assertThat(registration.getOptions().get(0).getArityMin()).isEqualTo(0);
|
||||||
|
assertThat(registration.getOptions().get(0).getArityMax()).isEqualTo(1);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command
|
||||||
|
private static class OptionValuesWithBoolean {
|
||||||
|
|
||||||
|
@Command
|
||||||
|
void command1(@Option(defaultValue = "false") boolean arg) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command
|
||||||
|
void command2(@Option(defaultValue = "false") Boolean arg) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command
|
||||||
|
void command3(@Option Boolean arg) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Command
|
||||||
|
void command4(Boolean arg) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private <T> ApplicationContextRunner configCommon(Class<T> type, T bean) {
|
private <T> ApplicationContextRunner configCommon(Class<T> type, T bean) {
|
||||||
return configCommon(type, bean, "command", new Class[0]);
|
return configCommon(type, bean, "command", new Class[0]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -157,10 +157,10 @@ public class StandardMethodTargetRegistrar implements MethodTargetRegistrar {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
|
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
|
||||||
optionSpec.arity(OptionArity.ZERO);
|
optionSpec.arity(OptionArity.ZERO_OR_ONE);
|
||||||
}
|
}
|
||||||
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
|
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
|
||||||
optionSpec.arity(OptionArity.ZERO);
|
optionSpec.arity(OptionArity.ZERO_OR_ONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!ObjectUtils.nullSafeEquals(so.defaultValue(), ShellOption.NONE)
|
if (!ObjectUtils.nullSafeEquals(so.defaultValue(), ShellOption.NONE)
|
||||||
@@ -198,10 +198,10 @@ public class StandardMethodTargetRegistrar implements MethodTargetRegistrar {
|
|||||||
.required()
|
.required()
|
||||||
.position(mp.getParameterIndex());
|
.position(mp.getParameterIndex());
|
||||||
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
|
if (ClassUtils.isAssignable(boolean.class, parameterType)) {
|
||||||
optionSpec.arity(OptionArity.ZERO);
|
optionSpec.arity(OptionArity.ZERO_OR_ONE);
|
||||||
}
|
}
|
||||||
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
|
else if (ClassUtils.isAssignable(Boolean.class, parameterType)) {
|
||||||
optionSpec.arity(OptionArity.ZERO);
|
optionSpec.arity(OptionArity.ZERO_OR_ONE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
optionSpec.arity(OptionArity.EXACTLY_ONE);
|
optionSpec.arity(OptionArity.EXACTLY_ONE);
|
||||||
|
|||||||
@@ -417,16 +417,29 @@ public class StandardMethodTargetRegistrarTests {
|
|||||||
assertThat(catalog.getRegistrations().get("foo1").getOptions()).hasSize(1);
|
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).getDefaultValue()).isEqualTo("false");
|
||||||
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).isRequired()).isFalse();
|
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")).isNotNull();
|
||||||
assertThat(catalog.getRegistrations().get("foo2").getOptions()).hasSize(1);
|
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).getDefaultValue()).isEqualTo("true");
|
||||||
assertThat(catalog.getRegistrations().get("foo2").getOptions().get(0).isRequired()).isFalse();
|
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")).isNotNull();
|
||||||
assertThat(catalog.getRegistrations().get("foo3").getOptions()).hasSize(1);
|
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).isRequired()).isFalse();
|
||||||
assertThat(catalog.getRegistrations().get("foo3").getOptions().get(0).getDefaultValue()).isEqualTo("false");
|
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
|
@ShellComponent
|
||||||
@@ -443,6 +456,10 @@ public class StandardMethodTargetRegistrarTests {
|
|||||||
@ShellMethod(value = "foo3")
|
@ShellMethod(value = "foo3")
|
||||||
public void foo3(@ShellOption boolean arg1) {
|
public void foo3(@ShellOption boolean arg1) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ShellMethod(value = "foo4")
|
||||||
|
public void foo4(boolean arg1) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user