in src/main/java/org/apache/commons/jexl3/internal/introspection/PermissionsParser.java [211:268]
private void readPackages() {
final StringBuilder temp = new StringBuilder();
Permissions.NoJexlPackage njpackage = null;
int i = 0;
int j = -1;
String pname = null;
while (i < size) {
final char c = src.charAt(i);
// if no parsing progress can be made, we are in error
if (j >= i) {
throw new IllegalStateException(unexpected(c, i));
}
j = i;
// get rid of space
if (Character.isWhitespace(c)) {
i = readSpaces(i + 1);
continue;
}
// eol comment
if (c == '#') {
i = readEol(i + 1);
continue;
}
// read the package qualified name
if (pname == null) {
final int next = readIdentifier(temp, i, true, true);
if (i != next) {
pname = temp.toString();
temp.setLength(0);
i = next;
// consume it if it is a wildcard decl
if (pname.endsWith(".*")) {
wildcards.add(pname);
pname = null;
}
continue;
}
}
// package mode
if (njpackage == null) {
if (c == '{') {
njpackage = new Permissions.NoJexlPackage();
packages.put(pname, njpackage);
i += 1;
}
} else if (c == '}') {
// empty means whole package
if (njpackage.isEmpty()) {
packages.put(pname, Permissions.NOJEXL_PACKAGE);
}
njpackage = null; // can restart anew
pname = null;
i += 1;
} else {
i = readClass(njpackage, null, null, i);
}
}
}