author | chegar |
Tue, 26 Jan 2016 09:18:51 +0000 | |
changeset 35377 | 462f93ab37f2 |
permissions | -rw-r--r-- |
35377
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
1 |
/* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
2 |
* Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
4 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. Oracle designates this |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
8 |
* particular file as subject to the "Classpath" exception as provided |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
9 |
* by Oracle in the LICENSE file that accompanied this code. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
10 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
15 |
* accompanied this code). |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
16 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
17 |
* You should have received a copy of the GNU General Public License version |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
20 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
22 |
* or visit www.oracle.com if you need additional information or have any |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
23 |
* questions. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
24 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
25 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
26 |
/* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
27 |
* This file is available under and governed by the GNU General Public |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
28 |
* License version 2 only, as published by the Free Software Foundation. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
29 |
* However, the following notice accompanied the original version of this |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
30 |
* file: |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
31 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
32 |
* The MIT License |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
33 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
34 |
* Copyright (c) 2004-2014 Paul R. Holser, Jr. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
35 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
36 |
* Permission is hereby granted, free of charge, to any person obtaining |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
37 |
* a copy of this software and associated documentation files (the |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
38 |
* "Software"), to deal in the Software without restriction, including |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
39 |
* without limitation the rights to use, copy, modify, merge, publish, |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
40 |
* distribute, sublicense, and/or sell copies of the Software, and to |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
41 |
* permit persons to whom the Software is furnished to do so, subject to |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
42 |
* the following conditions: |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
43 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
44 |
* The above copyright notice and this permission notice shall be |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
45 |
* included in all copies or substantial portions of the Software. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
46 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
47 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
48 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
49 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
50 |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
51 |
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
52 |
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
53 |
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
54 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
55 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
56 |
package jdk.internal.joptsimple; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
57 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
58 |
import java.util.*; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
59 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
60 |
import static java.util.Collections.*; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
61 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
62 |
import static jdk.internal.joptsimple.internal.Objects.*; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
63 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
64 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
65 |
* Representation of a group of detected command line options, their arguments, and non-option arguments. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
66 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
67 |
* @author <a href="mailto:pholser@alumni.rice.edu">Paul Holser</a> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
68 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
69 |
public class OptionSet { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
70 |
private final List<OptionSpec<?>> detectedSpecs; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
71 |
private final Map<String, AbstractOptionSpec<?>> detectedOptions; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
72 |
private final Map<AbstractOptionSpec<?>, List<String>> optionsToArguments; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
73 |
private final Map<String, AbstractOptionSpec<?>> recognizedSpecs; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
74 |
private final Map<String, List<?>> defaultValues; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
75 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
76 |
/* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
77 |
* Package-private because clients don't create these. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
78 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
79 |
OptionSet( Map<String, AbstractOptionSpec<?>> recognizedSpecs ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
80 |
detectedSpecs = new ArrayList<OptionSpec<?>>(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
81 |
detectedOptions = new HashMap<String, AbstractOptionSpec<?>>(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
82 |
optionsToArguments = new IdentityHashMap<AbstractOptionSpec<?>, List<String>>(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
83 |
defaultValues = defaultValues( recognizedSpecs ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
84 |
this.recognizedSpecs = recognizedSpecs; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
85 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
86 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
87 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
88 |
* Tells whether any options were detected. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
89 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
90 |
* @return {@code true} if any options were detected |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
91 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
92 |
public boolean hasOptions() { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
93 |
return !detectedOptions.isEmpty(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
94 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
95 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
96 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
97 |
* Tells whether the given option was detected. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
98 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
99 |
* @param option the option to search for |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
100 |
* @return {@code true} if the option was detected |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
101 |
* @see #has(OptionSpec) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
102 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
103 |
public boolean has( String option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
104 |
return detectedOptions.containsKey( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
105 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
106 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
107 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
108 |
* Tells whether the given option was detected. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
109 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
110 |
* <p>This method recognizes only instances of options returned from the fluent interface methods.</p> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
111 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
112 |
* <p>Specifying a {@linkplain ArgumentAcceptingOptionSpec#defaultsTo(Object, Object[])} default argument value} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
113 |
* for an option does not cause this method to return {@code true} if the option was not detected on the command |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
114 |
* line.</p> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
115 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
116 |
* @param option the option to search for |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
117 |
* @return {@code true} if the option was detected |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
118 |
* @see #has(String) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
119 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
120 |
public boolean has( OptionSpec<?> option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
121 |
return optionsToArguments.containsKey( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
122 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
123 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
124 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
125 |
* Tells whether there are any arguments associated with the given option. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
126 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
127 |
* @param option the option to search for |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
128 |
* @return {@code true} if the option was detected and at least one argument was detected for the option |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
129 |
* @see #hasArgument(OptionSpec) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
130 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
131 |
public boolean hasArgument( String option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
132 |
AbstractOptionSpec<?> spec = detectedOptions.get( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
133 |
return spec != null && hasArgument( spec ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
134 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
135 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
136 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
137 |
* Tells whether there are any arguments associated with the given option. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
138 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
139 |
* <p>This method recognizes only instances of options returned from the fluent interface methods.</p> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
140 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
141 |
* <p>Specifying a {@linkplain ArgumentAcceptingOptionSpec#defaultsTo(Object, Object[]) default argument value} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
142 |
* for an option does not cause this method to return {@code true} if the option was not detected on the command |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
143 |
* line, or if the option can take an optional argument but did not have one on the command line.</p> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
144 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
145 |
* @param option the option to search for |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
146 |
* @return {@code true} if the option was detected and at least one argument was detected for the option |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
147 |
* @throws NullPointerException if {@code option} is {@code null} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
148 |
* @see #hasArgument(String) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
149 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
150 |
public boolean hasArgument( OptionSpec<?> option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
151 |
ensureNotNull( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
152 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
153 |
List<String> values = optionsToArguments.get( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
154 |
return values != null && !values.isEmpty(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
155 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
156 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
157 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
158 |
* Gives the argument associated with the given option. If the option was given an argument type, the argument |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
159 |
* will take on that type; otherwise, it will be a {@link String}. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
160 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
161 |
* <p>Specifying a {@linkplain ArgumentAcceptingOptionSpec#defaultsTo(Object, Object[]) default argument value} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
162 |
* for an option will cause this method to return that default value even if the option was not detected on the |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
163 |
* command line, or if the option can take an optional argument but did not have one on the command line.</p> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
164 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
165 |
* @param option the option to search for |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
166 |
* @return the argument of the given option; {@code null} if no argument is present, or that option was not |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
167 |
* detected |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
168 |
* @throws NullPointerException if {@code option} is {@code null} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
169 |
* @throws OptionException if more than one argument was detected for the option |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
170 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
171 |
public Object valueOf( String option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
172 |
ensureNotNull( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
173 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
174 |
AbstractOptionSpec<?> spec = detectedOptions.get( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
175 |
if ( spec == null ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
176 |
List<?> defaults = defaultValuesFor( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
177 |
return defaults.isEmpty() ? null : defaults.get( 0 ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
178 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
179 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
180 |
return valueOf( spec ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
181 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
182 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
183 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
184 |
* Gives the argument associated with the given option. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
185 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
186 |
* <p>This method recognizes only instances of options returned from the fluent interface methods.</p> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
187 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
188 |
* @param <V> represents the type of the arguments the given option accepts |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
189 |
* @param option the option to search for |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
190 |
* @return the argument of the given option; {@code null} if no argument is present, or that option was not |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
191 |
* detected |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
192 |
* @throws OptionException if more than one argument was detected for the option |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
193 |
* @throws NullPointerException if {@code option} is {@code null} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
194 |
* @throws ClassCastException if the arguments of this option are not of the expected type |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
195 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
196 |
public <V> V valueOf( OptionSpec<V> option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
197 |
ensureNotNull( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
198 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
199 |
List<V> values = valuesOf( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
200 |
switch ( values.size() ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
201 |
case 0: |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
202 |
return null; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
203 |
case 1: |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
204 |
return values.get( 0 ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
205 |
default: |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
206 |
throw new MultipleArgumentsForOptionException( option.options() ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
207 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
208 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
209 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
210 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
211 |
* <p>Gives any arguments associated with the given option. If the option was given an argument type, the |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
212 |
* arguments will take on that type; otherwise, they will be {@link String}s.</p> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
213 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
214 |
* @param option the option to search for |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
215 |
* @return the arguments associated with the option, as a list of objects of the type given to the arguments; an |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
216 |
* empty list if no such arguments are present, or if the option was not detected |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
217 |
* @throws NullPointerException if {@code option} is {@code null} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
218 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
219 |
public List<?> valuesOf( String option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
220 |
ensureNotNull( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
221 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
222 |
AbstractOptionSpec<?> spec = detectedOptions.get( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
223 |
return spec == null ? defaultValuesFor( option ) : valuesOf( spec ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
224 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
225 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
226 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
227 |
* <p>Gives any arguments associated with the given option. If the option was given an argument type, the |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
228 |
* arguments will take on that type; otherwise, they will be {@link String}s.</p> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
229 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
230 |
* <p>This method recognizes only instances of options returned from the fluent interface methods.</p> |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
231 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
232 |
* @param <V> represents the type of the arguments the given option accepts |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
233 |
* @param option the option to search for |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
234 |
* @return the arguments associated with the option; an empty list if no such arguments are present, or if the |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
235 |
* option was not detected |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
236 |
* @throws NullPointerException if {@code option} is {@code null} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
237 |
* @throws OptionException if there is a problem converting the option's arguments to the desired type; for |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
238 |
* example, if the type does not implement a correct conversion constructor or method |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
239 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
240 |
public <V> List<V> valuesOf( OptionSpec<V> option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
241 |
ensureNotNull( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
242 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
243 |
List<String> values = optionsToArguments.get( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
244 |
if ( values == null || values.isEmpty() ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
245 |
return defaultValueFor( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
246 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
247 |
AbstractOptionSpec<V> spec = (AbstractOptionSpec<V>) option; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
248 |
List<V> convertedValues = new ArrayList<V>(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
249 |
for ( String each : values ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
250 |
convertedValues.add( spec.convert( each ) ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
251 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
252 |
return unmodifiableList( convertedValues ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
253 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
254 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
255 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
256 |
* Gives the set of options that were detected, in the form of {@linkplain OptionSpec}s, in the order in which the |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
257 |
* options were found on the command line. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
258 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
259 |
* @return the set of detected command line options |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
260 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
261 |
public List<OptionSpec<?>> specs() { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
262 |
List<OptionSpec<?>> specs = detectedSpecs; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
263 |
specs.remove( detectedOptions.get( NonOptionArgumentSpec.NAME ) ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
264 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
265 |
return unmodifiableList( specs ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
266 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
267 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
268 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
269 |
* Gives all declared options as a map of string to {@linkplain OptionSpec}. |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
270 |
* |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
271 |
* @return the declared options as a map |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
272 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
273 |
public Map<OptionSpec<?>, List<?>> asMap() { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
274 |
Map<OptionSpec<?>, List<?>> map = new HashMap<OptionSpec<?>, List<?>>(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
275 |
for ( AbstractOptionSpec<?> spec : recognizedSpecs.values() ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
276 |
if ( !spec.representsNonOptions() ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
277 |
map.put( spec, valuesOf( spec ) ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
278 |
return unmodifiableMap( map ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
279 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
280 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
281 |
/** |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
282 |
* @return the detected non-option arguments |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
283 |
*/ |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
284 |
public List<?> nonOptionArguments() { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
285 |
return unmodifiableList( valuesOf( detectedOptions.get( NonOptionArgumentSpec.NAME ) ) ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
286 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
287 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
288 |
void add( AbstractOptionSpec<?> spec ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
289 |
addWithArgument( spec, null ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
290 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
291 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
292 |
void addWithArgument( AbstractOptionSpec<?> spec, String argument ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
293 |
detectedSpecs.add( spec ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
294 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
295 |
for ( String each : spec.options() ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
296 |
detectedOptions.put( each, spec ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
297 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
298 |
List<String> optionArguments = optionsToArguments.get( spec ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
299 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
300 |
if ( optionArguments == null ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
301 |
optionArguments = new ArrayList<String>(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
302 |
optionsToArguments.put( spec, optionArguments ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
303 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
304 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
305 |
if ( argument != null ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
306 |
optionArguments.add( argument ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
307 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
308 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
309 |
@Override |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
310 |
public boolean equals( Object that ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
311 |
if ( this == that ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
312 |
return true; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
313 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
314 |
if ( that == null || !getClass().equals( that.getClass() ) ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
315 |
return false; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
316 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
317 |
OptionSet other = (OptionSet) that; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
318 |
Map<AbstractOptionSpec<?>, List<String>> thisOptionsToArguments = |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
319 |
new HashMap<AbstractOptionSpec<?>, List<String>>( optionsToArguments ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
320 |
Map<AbstractOptionSpec<?>, List<String>> otherOptionsToArguments = |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
321 |
new HashMap<AbstractOptionSpec<?>, List<String>>( other.optionsToArguments ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
322 |
return detectedOptions.equals( other.detectedOptions ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
323 |
&& thisOptionsToArguments.equals( otherOptionsToArguments ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
324 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
325 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
326 |
@Override |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
327 |
public int hashCode() { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
328 |
Map<AbstractOptionSpec<?>, List<String>> thisOptionsToArguments = |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
329 |
new HashMap<AbstractOptionSpec<?>, List<String>>( optionsToArguments ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
330 |
return detectedOptions.hashCode() ^ thisOptionsToArguments.hashCode(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
331 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
332 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
333 |
@SuppressWarnings( "unchecked" ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
334 |
private <V> List<V> defaultValuesFor( String option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
335 |
if ( defaultValues.containsKey( option ) ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
336 |
return (List<V>) defaultValues.get( option ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
337 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
338 |
return emptyList(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
339 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
340 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
341 |
private <V> List<V> defaultValueFor( OptionSpec<V> option ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
342 |
return defaultValuesFor( option.options().iterator().next() ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
343 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
344 |
|
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
345 |
private static Map<String, List<?>> defaultValues( Map<String, AbstractOptionSpec<?>> recognizedSpecs ) { |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
346 |
Map<String, List<?>> defaults = new HashMap<String, List<?>>(); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
347 |
for ( Map.Entry<String, AbstractOptionSpec<?>> each : recognizedSpecs.entrySet() ) |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
348 |
defaults.put( each.getKey(), each.getValue().defaultValues() ); |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
349 |
return defaults; |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
350 |
} |
462f93ab37f2
8148154: Integrate JOpt Simple for internal usage by JDK tools
chegar
parents:
diff
changeset
|
351 |
} |