in src/main/java/org/apache/netbeans/nbpackage/ExecutionContext.java [444:524]
private static List<String> parseParameters(String s) {
final int NULL = 0x0;
final int IN_PARAM = 0x1;
final int IN_DOUBLE_QUOTE = 0x2;
final int IN_SINGLE_QUOTE = 0x3;
ArrayList<String> params = new ArrayList<>(5);
char c;
int state = NULL;
StringBuilder buff = new StringBuilder(20);
int slength = s.length();
for (int i = 0; i < slength; i++) {
c = s.charAt(i);
switch (state) {
case NULL:
switch (c) {
case '\'':
state = IN_SINGLE_QUOTE;
break;
case '"':
state = IN_DOUBLE_QUOTE;
break;
default:
if (!Character.isWhitespace(c)) {
buff.append(c);
state = IN_PARAM;
}
}
break;
case IN_SINGLE_QUOTE:
if (c != '\'') {
buff.append(c);
} else {
state = IN_PARAM;
}
break;
case IN_DOUBLE_QUOTE:
switch (c) {
case '\\':
char peek = (i < slength - 1) ? s.charAt(i + 1) : Character.MIN_VALUE;
if (peek == '"' || peek == '\\') {
buff.append(peek);
i++;
} else {
buff.append(c);
}
break;
case '"':
state = IN_PARAM;
break;
default:
buff.append(c);
}
break;
case IN_PARAM:
switch (c) {
case '\'':
state = IN_SINGLE_QUOTE;
break;
case '"':
state = IN_DOUBLE_QUOTE;
break;
default:
if (Character.isWhitespace(c)) {
params.add(buff.toString());
buff.setLength(0);
state = NULL;
} else {
buff.append(c);
}
}
break;
}
}
if (buff.length() > 0) {
params.add(buff.toString());
}
return List.copyOf(params);
}