GnuParser.java
- /*
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package org.apache.commons.cli;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * The class GnuParser provides an implementation of the {@link Parser#flatten(Options, String[], boolean) flatten}
- * method.
- *
- * @deprecated since 1.3, use the {@link DefaultParser} instead
- */
- @Deprecated
- public class GnuParser extends Parser {
- /**
- * This flatten method does so using the following rules:
- * <ol>
- * <li>If an {@link Option} exists for the first character of the {@code arguments} entry <b>AND</b> an
- * {@link Option} does not exist for the whole {@code argument} then add the first character as an option to the
- * processed tokens list e.g. "-D" and add the rest of the entry to the also.</li>
- * <li>Otherwise just add the token to the processed tokens list.</li>
- * </ol>
- *
- * @param options The Options to parse the arguments by.
- * @param arguments The arguments that have to be flattened.
- * @param stopAtNonOption specifies whether to stop flattening when a non option has been encountered
- * @return a String array of the flattened arguments
- */
- @Override
- protected String[] flatten(final Options options, final String[] arguments, final boolean stopAtNonOption) {
- final List<String> tokens = new ArrayList<>();
- boolean eatTheRest = false;
- for (int i = 0; i < arguments.length; i++) {
- final String arg = arguments[i];
- if (arg != null) {
- if ("--".equals(arg)) {
- eatTheRest = true;
- tokens.add("--");
- } else if ("-".equals(arg)) {
- tokens.add("-");
- } else if (arg.startsWith("-")) {
- final String opt = Util.stripLeadingHyphens(arg);
- if (options.hasOption(opt)) {
- tokens.add(arg);
- } else {
- final int equalPos = DefaultParser.indexOfEqual(opt);
- if (equalPos != -1 && options.hasOption(opt.substring(0, equalPos))) {
- // the format is --foo=value or -foo=value
- tokens.add(arg.substring(0, arg.indexOf(Char.EQUAL))); // --foo
- tokens.add(arg.substring(arg.indexOf(Char.EQUAL) + 1)); // value
- } else if (options.hasOption(arg.substring(0, 2))) {
- // the format is a special properties option (-Dproperty=value)
- tokens.add(arg.substring(0, 2)); // -D
- tokens.add(arg.substring(2)); // property=value
- } else {
- eatTheRest = stopAtNonOption;
- tokens.add(arg);
- }
- }
- } else {
- tokens.add(arg);
- }
- if (eatTheRest) {
- for (i++; i < arguments.length; i++) { // NOPMD
- tokens.add(arguments[i]);
- }
- }
- }
- }
- return tokens.toArray(Util.EMPTY_STRING_ARRAY);
- }
- }