[ https://issues.apache.org/jira/browse/CLI-284?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16507368#comment-16507368 ]
ASF GitHub Bot commented on CLI-284: ------------------------------------ Github user sfuhrm commented on the issue: https://github.com/apache/commons-cli/pull/25 Hi @kinow thanks for your review! Oops, my maven build had a hickup and all tests were green. There's a design problem in the code you pointed me to. Every Option instance may be illegal (short and long == null) until first use. OptionBuilder (line 356) insists on creating an Option instance even if he long parameter is missing. Option.Builder does something similar. The setting happens after Option instance construction. > Inconsistency in constraints for creating an instance of class Option using > builder pattern or constructor > ---------------------------------------------------------------------------------------------------------- > > Key: CLI-284 > URL: https://issues.apache.org/jira/browse/CLI-284 > Project: Commons CLI > Issue Type: Bug > Reporter: Dilraj Singh > Assignee: Bruno P. Kinoshita > Priority: Major > Attachments: CLI284.patch > > > Builder pattern for creating an instance of class *Option* ensures that at > least one of the representation (short and long representation) for the > option is not null. It throws an *IllegalArgumentException* in-case program > tries to build an instance with both the representations as null. Consider > the following code snippet for reference. > {code:java} > public static void main(String[] args) { > Option.Builder builder = Option.builder(); > Option op = builder.build(); > } > {code} > This piece of code fails with the following exception > {noformat} > Exception in thread "main" java.lang.IllegalArgumentException: Either opt or > longOpt must be specified > {noformat} > But if we try to create an instance of Option by calling its constructor, It > allows the creation with both opt and longOpt for Option as null. Consider > the following code snippet for reference > {code:java} > public static void main(String[] args) { > Option op = new Option(null, null); > System.out.format("Short Representation: %s\n" + > "Long Representation: %s", op.getOpt(), > op.getLongOpt()); > } > {code} > Output: > {noformat} > Short Representation: null > Long Representation: null > {noformat} > Calling a method on an instance with both opt and longOpt as null will lead > to undesired null pointer exception. For example, calling > {code:java} > op.getId() {code} > will throw a null pointer exception, thus violating the method contract. > So as to fix this we need to make sure that whenever a constructor is invoked > it has a non-null argument value for at least one of the Option > representation. -- This message was sent by Atlassian JIRA (v7.6.3#76005)