From 692056f33bd577ad220d99a56d25e84a1ba04a1d Mon Sep 17 00:00:00 2001 From: wtfacoconut Date: Thu, 6 Jul 2023 21:31:16 +1000 Subject: [PATCH] Check for cli parameters to not fail picocli unit test testIssue1027RepeatingPositionalParamsWithMinMultiplicity. --- .../src/main/java/picocli/CommandLine.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/fcli-common/src/main/java/picocli/CommandLine.java b/fcli-common/src/main/java/picocli/CommandLine.java index 8853e81330..af37313177 100644 --- a/fcli-common/src/main/java/picocli/CommandLine.java +++ b/fcli-common/src/main/java/picocli/CommandLine.java @@ -13096,26 +13096,39 @@ void validate(CommandLine commandLine) { private boolean isRequiredArgGroup(ArgGroupSpec spec) { if ( spec.exclusive() ) { // Only return true if all options and subgroups are considered required - return isAllOptionsRequired(spec) && isAllSubGroupsRequired(spec); + return isAllOptionsRequired(spec) && isAllSubGroupsRequired(spec) && isAllParamsRequired(spec); } else { // Return true if at least one option or subgroup is required - return isAnyOptionRequired(spec) || isAnySubGroupRequired(spec); + return isAnyOptionRequired(spec) || isAnySubGroupRequired(spec) || isAnyParamRequired(spec); } } - + private boolean isAllOptionsRequired(ArgGroupSpec spec) { for ( OptionSpec option : spec.options() ) { if ( !option.required() ) { return false; } } return true; } - + private boolean isAnyOptionRequired(ArgGroupSpec spec) { for ( OptionSpec option : spec.options() ) { if ( option.required() ) { return true; } } return false; } + + public boolean isAllParamsRequired(ArgGroupSpec spec) { + for ( PositionalParamSpec param : spec.positionalParameters() ){ + if( !param.required() ){return false;} + } + return true; + } + public boolean isAnyParamRequired(ArgGroupSpec spec) { + for ( PositionalParamSpec param : spec.positionalParameters() ){ + if( param.required() ){return true;} + } + return false; + } private boolean isAllSubGroupsRequired(ArgGroupSpec spec) { for ( ArgGroupSpec subgroup : spec.subgroups() ) {