in src/main/java/org/apache/commons/cli/DefaultParser.java [459:522]
private void handleShortAndLongOption(final String token) throws ParseException {
final String t = Util.stripLeadingHyphens(token);
final int pos = t.indexOf('=');
if (t.length() == 1) {
// -S
if (options.hasShortOption(t)) {
handleOption(options.getOption(t));
} else {
handleUnknownToken(token);
}
} else if (pos == -1) {
// no equal sign found (-xxx)
if (options.hasShortOption(t)) {
handleOption(options.getOption(t));
} else if (!getMatchingLongOptions(t).isEmpty()) {
// -L or -l
handleLongOptionWithoutEqual(token);
} else {
// look for a long prefix (-Xmx512m)
final String opt = getLongPrefix(t);
if (opt != null && options.getOption(opt).acceptsArg()) {
handleOption(options.getOption(opt));
currentOption.addValueForProcessing(stripLeadingAndTrailingQuotesDefaultOff(t.substring(opt.length())));
currentOption = null;
} else if (isJavaProperty(t)) {
// -SV1 (-Dflag)
handleOption(options.getOption(t.substring(0, 1)));
currentOption.addValueForProcessing(stripLeadingAndTrailingQuotesDefaultOff(t.substring(1)));
currentOption = null;
} else {
// -S1S2S3 or -S1S2V
handleConcatenatedOptions(token);
}
}
} else {
// equal sign found (-xxx=yyy)
final String opt = t.substring(0, pos);
final String value = t.substring(pos + 1);
if (opt.length() == 1) {
// -S=V
final Option option = options.getOption(opt);
if (option != null && option.acceptsArg()) {
handleOption(option);
currentOption.addValueForProcessing(value);
currentOption = null;
} else {
handleUnknownToken(token);
}
} else if (isJavaProperty(opt)) {
// -SV1=V2 (-Dkey=value)
handleOption(options.getOption(opt.substring(0, 1)));
currentOption.addValueForProcessing(opt.substring(1));
currentOption.addValueForProcessing(value);
currentOption = null;
} else {
// -L=V or -l=V
handleLongOptionWithEqual(token);
}
}
}