@Override public Object visit(ASTOrNode node, Object data) { ASTOrNode orNode = JexlNodes.newInstanceOfType(node); orNode.image = node.image; return flattenTree(node, orNode, data); }
private <T extends JexlNode> T copy(T node, Object data) { T newNode = newInstanceOfType(node); newNode.image = node.image; ArrayList<JexlNode> children = newArrayList(); for (JexlNode child : children(node)) { JexlNode copiedChild = (JexlNode) child.jjtAccept(this, data); if (copiedChild != null) { children.add(copiedChild); } } return children(newNode, children.toArray(new JexlNode[children.size()])); }
@Override public Object visit(ASTFunctionNode node, Object data) { ASTFunctionNode newNode = newInstanceOfType(node); newNode.image = node.image; ArrayList<JexlNode> children = newArrayList(); JexlNode[] childNodes = children(node); for (int i = 0; i < childNodes.length; i++) { // passing in i-2 because the first function argument is actually at node 2. The first two // nodes are the namespace and function name. JexlNode copiedChild = (JexlNode) childNodes[i].jjtAccept(this, i); if (copiedChild != null) { children.add(copiedChild); } } return children(newNode, children.toArray(new JexlNode[0])); }
} else { ASTAndNode newNode = newInstanceOfType(node); newNode.image = node.image; for (String field : fields) {
@Override public Object visit(ASTOrNode node, Object data) { ASTOrNode newNode = newInstanceOfType(node); newNode.image = node.image;
@Override public Object visit(ASTAndNode node, Object data) { if (ExceededValueThresholdMarkerJexlNode.instanceOf(node) || ExceededTermThresholdMarkerJexlNode.instanceOf(node) || ExceededOrThresholdMarkerJexlNode.instanceOf(node) || ASTDelayedPredicate.instanceOf(node) || ASTEvaluationOnly.instanceOf(node)) { return super.visit(node, data); } else { ASTAndNode andNode = JexlNodes.newInstanceOfType(node); andNode.image = node.image; return flattenTree(node, andNode, data); } }
@Override public Object visit(ASTAndNode node, Object data) { List<JexlNode> leaves = new ArrayList<>(); Map<LiteralRange<?>,List<JexlNode>> ranges = JexlASTHelper.getBoundedRangesIndexAgnostic(node, leaves, false); JexlNode andNode = JexlNodes.newInstanceOfType(node); andNode.image = node.image; andNode.jjtSetParent(node.jjtGetParent()); // We have a bounded range completely inside of an AND/OR if (!ranges.isEmpty()) { andNode = coalesceBoundedRanges(ranges, leaves, node, andNode, data); } else { // We have no bounded range to replace, just proceed as normal JexlNodes.ensureCapacity(andNode, node.jjtGetNumChildren()); for (int i = 0; i < node.jjtGetNumChildren(); i++) { JexlNode newChild = (JexlNode) node.jjtGetChild(i).jjtAccept(this, data); andNode.jjtAddChild(newChild, i); newChild.jjtSetParent(andNode); } } return andNode; }
@Override public Object visit(ASTAndNode node, Object data) { List<JexlNode> leaves = new ArrayList<>(); Map<LiteralRange<?>,List<JexlNode>> ranges = JexlASTHelper.getBoundedRanges(node, this.dataTypeFilter, this.helper, leaves, false); JexlNode andNode = JexlNodes.newInstanceOfType(node); andNode.image = node.image; andNode.jjtSetParent(node.jjtGetParent()); // We have a bounded range completely inside of an AND/OR if (!ranges.isEmpty()) { andNode = delayIndexBoundedRange(ranges, leaves, node, andNode, data); } else { // We have no bounded range to replace, just proceed as normal JexlNodes.ensureCapacity(andNode, node.jjtGetNumChildren()); for (int i = 0; i < node.jjtGetNumChildren(); i++) { JexlNode newChild = (JexlNode) node.jjtGetChild(i).jjtAccept(this, data); andNode.jjtAddChild(newChild, i); newChild.jjtSetParent(andNode); } } return andNode; }
@Override public Object visit(ASTAndNode node, Object data) { List<JexlNode> leaves = new ArrayList<>(); Map<LiteralRange<?>,List<JexlNode>> ranges = JexlASTHelper.getBoundedRanges(node, this.config.getDatatypeFilter(), this.helper, leaves, false); JexlNode andNode = JexlNodes.newInstanceOfType(node); andNode.image = node.image; andNode.jjtSetParent(node.jjtGetParent()); // We have a bounded range completely inside of an AND/OR if (!ranges.isEmpty()) { andNode = expandIndexBoundedRange(ranges, leaves, node, andNode, data); } else { // We have no bounded range to replace, just proceed as normal JexlNodes.ensureCapacity(andNode, node.jjtGetNumChildren()); for (int i = 0; i < node.jjtGetNumChildren(); i++) { JexlNode newChild = (JexlNode) node.jjtGetChild(i).jjtAccept(this, data); andNode.jjtAddChild(newChild, i); newChild.jjtSetParent(andNode); } } return andNode; }
return super.visit(node, data); } else if (node.jjtGetParent() instanceof ASTAndNode) { ASTAndNode andNode = JexlNodes.newInstanceOfType(((ASTAndNode) (node.jjtGetParent()))); andNode.image = node.jjtGetParent().image; ASTOrNode orNode = JexlNodes.newInstanceOfType(((ASTOrNode) (node.jjtGetParent()))); orNode.image = node.jjtGetParent().image;
return super.visit(node, data); } else if (node.jjtGetParent() instanceof ASTAndNode) { ASTAndNode andNode = JexlNodes.newInstanceOfType(((ASTAndNode) (node.jjtGetParent()))); andNode.image = node.jjtGetParent().image; ASTOrNode orNode = JexlNodes.newInstanceOfType(((ASTOrNode) (node.jjtGetParent()))); orNode.image = node.jjtGetParent().image;