Dilraj Singh created CLI-284:
--------------------------------

             Summary: 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


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)

Reply via email to