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:
@@ -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.
|
||||
|
||||
====
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user