in src/main/java/org/apache/commons/jexl3/parser/JexlNode.java [257:298]
public boolean isSafeLhs(final boolean safe) {
if (this instanceof ASTReference) {
return jjtGetChild(0).isSafeLhs(safe);
}
if (this instanceof ASTMethodNode) {
if (jjtGetNumChildren() > 1
&& jjtGetChild(0) instanceof ASTIdentifierAccess
&& (((ASTIdentifierAccess) jjtGetChild(0)).isSafe() || safe)) {
return true;
}
}
final JexlNode parent = jjtGetParent();
if (parent == null) {
return false;
}
// find this node in its parent
final int nsiblings = parent.jjtGetNumChildren();
int rhs = -1;
for(int s = 0; s < nsiblings; ++s) {
final JexlNode sibling = parent.jjtGetChild(s);
if (sibling == this) {
// the next chid offset of this nodes parent
rhs = s + 1;
break;
}
}
// seek next child in parent
if (rhs >= 0 && rhs < nsiblings) {
JexlNode rsibling = parent.jjtGetChild(rhs);
if (rsibling instanceof ASTMethodNode || rsibling instanceof ASTFunctionNode) {
rsibling = rsibling.jjtGetChild(0);
}
if (rsibling instanceof ASTIdentifierAccess
&& (((ASTIdentifierAccess) rsibling).isSafe() || safe)) {
return true;
}
if (rsibling instanceof ASTArrayAccess) {
return safe;
}
}
return false;
}