Skip to content

ArgSpec.originallyRequired() does not actually preserve original required setting #2506

Description

@cklin

I understand that the intent of originallyRequired is to preserve the original user-provided required setting. However, it seems that originallyRequired does not actually preserve the original required setting:

https://github.com/remkop/picocli/blob/121646e408bfee65f70875a6ddb94e16e83d958c/src/main/java/picocli/CommandLine.java#L10445-L10447

    //Keep initial required as originallyRequired for Issue#1380 https://github.com/remkop/picocli/issues/1380
    arg.originallyRequired = true;
    arg.required = true;

Here the code probably should have said

    //Keep initial required as originallyRequired for Issue#1380 https://github.com/remkop/picocli/issues/1380
    arg.originallyRequired = arg.required;
    arg.required = true;

Additionally, the Builder should set originallyRequired when it sets required:

https://github.com/remkop/picocli/blob/121646e408bfee65f70875a6ddb94e16e83d958c/src/main/java/picocli/CommandLine.java#L9570-L9574

    Builder(Option option, IAnnotatedElement annotatedElement, IFactory factory) {
        this(annotatedElement);
        arity = Range.optionArity(annotatedElement);
        required = option.required();

https://github.com/remkop/picocli/blob/121646e408bfee65f70875a6ddb94e16e83d958c/src/main/java/picocli/CommandLine.java#L9606-L9610

    Builder(Parameters parameters, IAnnotatedElement annotatedElement, IFactory factory) {
        this(annotatedElement);
        arity = Range.parameterArity(annotatedElement);
        required = arity.min > 0; //but arity may still be unresolved...

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions