Register option without prefix

- While option should be defined i.e. using "--arg", discover
  prefix from ShellMethod#prefix and use that if just "arg"
  is defined.
- Backport #575
- Fixes #577
This commit is contained in:
Janne Valkealahti
2022-11-26 15:08:07 +00:00
parent 7e2c6c180a
commit e70ea6b555
4 changed files with 67 additions and 1 deletions

View File

@@ -118,6 +118,14 @@ public class StandardMethodTargetRegistrar implements MethodTargetRegistrar, App
else if (o.length() == stripped.length() + 1 && stripped.length() == 1) {
shortNames.add(stripped.charAt(0));
}
else if (o.length() == stripped.length()) {
if ("--".equals(shellMapping.prefix())) {
longNames.add(stripped);
}
else if ("-".equals(shellMapping.prefix()) && stripped.length() == 1) {
shortNames.add(stripped.charAt(0));
}
}
});
}
else {

View File

@@ -443,4 +443,44 @@ public class StandardMethodTargetRegistrarTests {
public void foo3(@ShellOption boolean arg1) {
}
}
@Test
public void testOptionWithoutHyphenRegisterFromDefaultPrefix() {
applicationContext = new AnnotationConfigApplicationContext(OptionWithoutHyphenRegisterFromDefaultPrefix.class);
registrar.setApplicationContext(applicationContext);
registrar.register(catalog);
assertThat(catalog.getRegistrations().get("foo1")).isNotNull();
assertThat(catalog.getRegistrations().get("foo1").getOptions()).hasSize(1);
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getLongNames()).hasSize(1);
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getShortNames()).hasSize(0);
}
@ShellComponent
public static class OptionWithoutHyphenRegisterFromDefaultPrefix {
@ShellMethod(value = "foo1")
public void foo1(@ShellOption("xxx") boolean arg1) {
}
}
@Test
public void testOptionWithoutHyphenRegisterFromChangedPrefix() {
applicationContext = new AnnotationConfigApplicationContext(OptionWithoutHyphenRegisterFromChangedPrefix.class);
registrar.setApplicationContext(applicationContext);
registrar.register(catalog);
assertThat(catalog.getRegistrations().get("foo1")).isNotNull();
assertThat(catalog.getRegistrations().get("foo1").getOptions()).hasSize(1);
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getLongNames()).hasSize(0);
assertThat(catalog.getRegistrations().get("foo1").getOptions().get(0).getShortNames()).hasSize(1);
}
@ShellComponent
public static class OptionWithoutHyphenRegisterFromChangedPrefix {
@ShellMethod(value = "foo1", prefix = "-")
public void foo1(@ShellOption("x") boolean arg1) {
}
}
}