diff --git a/spring-shell2-samples/src/main/java/org/springframework/shell2/samples/standard/Commands.java b/spring-shell2-samples/src/main/java/org/springframework/shell2/samples/standard/Commands.java index ae6c7f59..fe277f73 100644 --- a/spring-shell2-samples/src/main/java/org/springframework/shell2/samples/standard/Commands.java +++ b/spring-shell2-samples/src/main/java/org/springframework/shell2/samples/standard/Commands.java @@ -44,8 +44,13 @@ public class Commands { } @ShellMethod(help = "it's cool") - public void foo(String bar) { - + public String foo(String bar) { + return bar; + } + + @ShellMethod(help = "it's cool with a prefix", prefix = "-") + public String fooPrefix(String bar) { + return bar; } @ShellMethod(help = "Shows support for boolean parameters, with arity=0") diff --git a/spring-shell2-standard/src/main/java/org/springframework/shell2/standard/StandardParameterResolver.java b/spring-shell2-standard/src/main/java/org/springframework/shell2/standard/StandardParameterResolver.java index 3e4adf90..57939dfd 100644 --- a/spring-shell2-standard/src/main/java/org/springframework/shell2/standard/StandardParameterResolver.java +++ b/spring-shell2-standard/src/main/java/org/springframework/shell2/standard/StandardParameterResolver.java @@ -105,7 +105,7 @@ public class StandardParameterResolver implements ParameterResolver { @Override public Object resolve(MethodParameter methodParameter, List words) { - String prefix = prefixForMethod(methodParameter); + String prefix = prefixForMethod(methodParameter.getMethod()); CacheKey cacheKey = new CacheKey(methodParameter.getMethod(), words); Map resolved = parameterCache.computeIfAbsent(cacheKey, (k) -> { @@ -195,7 +195,7 @@ public class StandardParameterResolver implements ParameterResolver { } private Set gatherAllPossibleKeys(Method method) { - final String prefix = "--"; + final String prefix = prefixForMethod(method); return Arrays.stream(method.getParameters()) .flatMap(p -> { ShellOption option = p.getAnnotation(ShellOption.class); @@ -208,8 +208,8 @@ public class StandardParameterResolver implements ParameterResolver { }).collect(Collectors.toSet()); } - private String prefixForMethod(MethodParameter methodParameter) { - return methodParameter.getMethod().getAnnotation(ShellMethod.class).prefix(); + private String prefixForMethod(Method method) { + return method.getAnnotation(ShellMethod.class).prefix(); } private Optional defaultValueFor(Parameter parameter) { @@ -380,7 +380,7 @@ public class StandardParameterResolver implements ParameterResolver { * or from the actual parameter name. */ private Stream getKeysForParameter(Method method, int index) { - String prefix = "--"; + String prefix = prefixForMethod(method); Parameter p = method.getParameters()[index]; ShellOption option = p.getAnnotation(ShellOption.class); if (option != null && option.value().length > 0) { diff --git a/spring-shell2-standard/src/test/java/org/springframework/shell2/standard/Remote.java b/spring-shell2-standard/src/test/java/org/springframework/shell2/standard/Remote.java index a1433e12..c457aeb6 100644 --- a/spring-shell2-standard/src/test/java/org/springframework/shell2/standard/Remote.java +++ b/spring-shell2-standard/src/test/java/org/springframework/shell2/standard/Remote.java @@ -45,12 +45,16 @@ public class Remote { String name, @ShellOption(defaultValue="defoolt") String foo, @ShellOption(value = {"--bar", "--baz"}, defaultValue = "last") String bar) { - } @ShellMethod(help = "bye bye") public void shutdown(@ShellOption Delay delay) { + } + + @ShellMethod(help = "a different prefix", prefix = "-") + public void prefixTest(@ShellOption String message) { + } @ShellMethod(help = "add 3 numbers together") diff --git a/spring-shell2-standard/src/test/java/org/springframework/shell2/standard/StandardParameterResolverTest.java b/spring-shell2-standard/src/test/java/org/springframework/shell2/standard/StandardParameterResolverTest.java index 7cc25374..c3e755e3 100644 --- a/spring-shell2-standard/src/test/java/org/springframework/shell2/standard/StandardParameterResolverTest.java +++ b/spring-shell2-standard/src/test/java/org/springframework/shell2/standard/StandardParameterResolverTest.java @@ -74,6 +74,16 @@ public class StandardParameterResolverTest { )).isEqualTo("last"); } + + @Test + public void testParsesWithMethodPrefix() throws Exception { + Method method = findMethod(Remote.class, "prefixTest", String.class); + + assertThat(resolver.resolve( + Utils.createMethodParameter(method, 0), + asList("-message abc".split(" ")) + )).isEqualTo("abc"); + } @Test public void testParameterSpecifiedTwiceViaDifferentAliases() throws Exception {