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

@@ -25,6 +25,16 @@ include::{snippets}/OptionSnippets.java[tag=option-with-annotation]
----
====
If option name is defined without prefix, either `-` or `--`, it is discovered
from _ShellMethod#prefix_.
====
[source, java, indent=0]
----
include::{snippets}/OptionSnippets.java[tag=option-with-annotation-without-prefix]
----
====
Programmatic way with `CommandRegistration` is to use method adding a long name.
====

View File

@@ -23,12 +23,20 @@ public class OptionSnippets {
class Dump1 {
// tag::option-with-annotation[]
public String example(@ShellOption(value = { "argx" }) String arg1) {
public String example(@ShellOption(value = { "--argx" }) String arg1) {
return "Hello " + arg1;
}
// end::option-with-annotation[]
}
class Dump7 {
// tag::option-with-annotation-without-prefix[]
public String example(@ShellOption(value = { "argx" }) String arg1) {
return "Hello " + arg1;
}
// end::option-with-annotation-without-prefix[]
}
class Dump2 {
// tag::option-without-annotation[]
public String example(String arg1) {

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) {
}
}
}