jcommander
jcommander copied to clipboard
An IParametersValidator on an ParametersDelegate should not be lifted to the top-level object
Take the following example:
@Parameters(parametersValidators = MyValidator.class)
static final class SubGroup {
@Parameter(names = "--arg1")
private boolean arg1;
@Parameter(names = "--arg2")
private String arg2;
}
static final class ArgsTop {
@Parameter(names = "--argtop")
private boolean argtop;
@ParametersDelegate
private SubGroup subGroup = new SubGroup();
}
public static void main(String[] args) {
var args = new ArgsTop();
JCommander.newBuilder().addObject(args).build(); // MyValidator::validate invoked reflectively here.
}
When MyValidator::validate
is invoked, it should only see entries for arg1
and arg2
, not argtop
.
This would make it much easier to implement generic mutex groups. I think it would also be more intuitive.
Feel free to contribute a PR including a test, but note that we must stay backwards compatible unless we move on to jCommander 2.x. OTOH I think we could safely say that it is a bug that MyValidator can see argtop. So I would rate your contribution as a bug fix, which we can include in 1.x.
@ekpdt Elan, still looking forward to receive your PR. Still working on it?