in src/main/java/org/apache/commons/jexl3/internal/introspection/PermissionsParser.java [174:206]
private int readIdentifier(final StringBuilder id, final int offset, final boolean dot, final boolean star) {
int begin = -1;
boolean starf = star;
int i = offset;
char c = 0;
while (i < size) {
c = src.charAt(i);
// accumulate identifier characters
if (Character.isJavaIdentifierStart(c) && begin < 0) {
begin = i;
id.append(c);
} else if (Character.isJavaIdentifierPart(c) && begin >= 0) {
id.append(c);
} else if (dot && c == '.') {
if (src.charAt(i - 1) == '.') {
throw new IllegalStateException(unexpected(c, i));
}
id.append('.');
begin = -1;
} else if (starf && c == '*') {
id.append('*');
starf = false; // only one star
} else {
break;
}
i += 1;
}
// cant end with a dot
if (dot && c == '.') {
throw new IllegalStateException(unexpected(c, i));
}
return i;
}