From 2ba288cb54b68eb3452a201f0fea6719f87ad53d Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Thu, 2 Jun 2022 09:55:55 +0100 Subject: [PATCH] Fix ShellOption with required - Take 2 - Fix case with optional. - Fixes #436 --- .../StandardMethodTargetRegistrar.java | 2 +- .../StandardMethodTargetRegistrarTests.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardMethodTargetRegistrar.java b/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardMethodTargetRegistrar.java index 0e9c3d81..4167027d 100644 --- a/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardMethodTargetRegistrar.java +++ b/spring-shell-standard/src/main/java/org/springframework/shell/standard/StandardMethodTargetRegistrar.java @@ -140,7 +140,7 @@ public class StandardMethodTargetRegistrar implements MethodTargetRegistrar, App && !ObjectUtils.nullSafeEquals(so.defaultValue(), ShellOption.NULL)) { optionSpec.defaultValue(so.defaultValue()); } - else { + if (ObjectUtils.nullSafeEquals(so.defaultValue(), ShellOption.NONE)) { optionSpec.required(); } } diff --git a/spring-shell-standard/src/test/java/org/springframework/shell/standard/StandardMethodTargetRegistrarTests.java b/spring-shell-standard/src/test/java/org/springframework/shell/standard/StandardMethodTargetRegistrarTests.java index df118d4d..2ec28711 100644 --- a/spring-shell-standard/src/test/java/org/springframework/shell/standard/StandardMethodTargetRegistrarTests.java +++ b/spring-shell-standard/src/test/java/org/springframework/shell/standard/StandardMethodTargetRegistrarTests.java @@ -119,6 +119,29 @@ public class StandardMethodTargetRegistrarTests { } } + @Test + public void testOptionOptionalWithAnnotation() { + applicationContext = new AnnotationConfigApplicationContext(Sample3.class); + registrar.setApplicationContext(applicationContext); + registrar.register(catalog); + Map registrations = catalog.getRegistrations(); + assertThat(registrations).hasSize(1); + + assertThat(registrations.get("say-hello")).isNotNull(); + assertThat(registrations.get("say-hello").getOptions()).hasSize(1); + assertThat(registrations.get("say-hello").getOptions().get(0).isRequired()).isFalse(); + assertThat(registrations.get("say-hello").getOptions().get(0).getDefaultValue()).isNull(); + } + + @ShellComponent + public static class Sample3 { + + @ShellMethod("some command") + public String sayHello(@ShellOption( defaultValue = ShellOption.NULL) String what) { + return "hello " + what; + } + } + @Test public void testAvailabilityIndicators() { applicationContext = new AnnotationConfigApplicationContext(SampleWithAvailability.class);