/** {@inheritDoc} */ public Object visit(ASTReferenceExpression node, Object data) { JexlNode first = node.jjtGetChild(0); builder.append('('); accept(first, data); builder.append(')'); int num = node.jjtGetNumChildren(); for (int i = 1; i < num; ++i) { builder.append("["); accept(node.jjtGetChild(i), data); builder.append("]"); } return data; }
/** * This method is used to find leaf nodes. Reference, ReferenceExpression, and 'and' or 'or' nodes with a single child are passed through in search of the * actual leaf node. * * @param node * The node whose children we will check * @return The found leaf node, or null */ private JexlNode getLeafNode(ASTReferenceExpression node) { // ignore marked nodes if (!QueryPropertyMarkerVisitor.instanceOfAny(node)) { if (node != null && node.jjtGetNumChildren() == 1) { JexlNode kid = node.jjtGetChild(0); if (kid instanceof ASTAndNode) { return getLeafNode((ASTAndNode) kid); } else if (CompositeUtils.ALL_VALID_LEAF_NODE_CLASSES.contains(kid.getClass())) { return kid; } else { return getLeafNode(kid); } } } return null; }
@Override public Object visit(ASTReferenceExpression node, Object data) { if (traverse(data, fullTraversal)) { int i = 0; while (traverse(data, fullTraversal) && i < node.jjtGetNumChildren()) { data = node.jjtGetChild(i).jjtAccept(this, data); i++; } } return data; }
JexlNode newNode = (JexlNode) node.jjtGetChild(i).jjtAccept(this, null); newNode.jjtSetParent(expression); expression.jjtAddChild(newNode, expression.jjtGetNumChildren());
andNode.image = node.jjtGetParent().image; for (int i = 0; i < node.jjtGetNumChildren(); i++) { JexlNode newNode = (JexlNode) node.jjtGetChild(i).jjtAccept(this, null); newNode.jjtSetParent(andNode); orNode.image = node.jjtGetParent().image; for (int i = 0; i < node.jjtGetNumChildren(); i++) { JexlNode newNode = (JexlNode) node.jjtGetChild(i).jjtAccept(this, null); newNode.jjtSetParent(orNode); } else if (node.jjtGetNumChildren() == 1 && (newExpressive = advanceReferenceExpression(node.jjtGetChild(0))) != null) { return visit(newExpressive, data);