From issues-return-68239-archive-asf-public=cust-asf.ponee.io@commons.apache.org Sun Jun 10 14:06:05 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 8E5A918062B for ; Sun, 10 Jun 2018 14:06:04 +0200 (CEST) Received: (qmail 76869 invoked by uid 500); 10 Jun 2018 12:06:03 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 76858 invoked by uid 99); 10 Jun 2018 12:06:03 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 10 Jun 2018 12:06:03 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 087FFCB4A4 for ; Sun, 10 Jun 2018 12:06:03 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -109.501 X-Spam-Level: X-Spam-Status: No, score=-109.501 tagged_above=-999 required=6.31 tests=[ENV_AND_HDR_SPF_MATCH=-0.5, KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, USER_IN_DEF_SPF_WL=-7.5, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id w1i_agrNPApq for ; Sun, 10 Jun 2018 12:06:02 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id DADD45F288 for ; Sun, 10 Jun 2018 12:06:01 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 53BB0E066C for ; Sun, 10 Jun 2018 12:06:01 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id 5B56F2109A for ; Sun, 10 Jun 2018 12:06:00 +0000 (UTC) Date: Sun, 10 Jun 2018 12:06:00 +0000 (UTC) From: "ASF GitHub Bot (JIRA)" To: issues@commons.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (CLI-284) Inconsistency in constraints for creating an instance of class Option using builder pattern or constructor MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ 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)