protected static JexlNode buildUntypedNewNode(JexlNode newNode, JexlNode literal, ASTIdentifier identifier) { ASTReference literalReference = new ASTReference(ParserTreeConstants.JJTREFERENCE), identifierReference = new ASTReference( ParserTreeConstants.JJTREFERENCE); literalReference.jjtAddChild(literal, 0); literal.jjtSetParent(literalReference); identifierReference.jjtAddChild(identifier, 0); identifier.jjtSetParent(identifierReference); newNode.jjtAddChild(literalReference, 0); newNode.jjtAddChild(identifierReference, 1); identifierReference.jjtSetParent(newNode); literalReference.jjtSetParent(newNode); return newNode; }
/** {@inheritDoc} */ public Object visit(ASTReference node, Object data) { int num = node.jjtGetNumChildren(); accept(node.jjtGetChild(0), data); for (int i = 1; i < num; ++i) { builder.append("."); accept(node.jjtGetChild(i), data); } return data; }
@Override public Object visit(ASTReference node, Object data) { node.childrenAccept(this, data); return data; }
/** * Wraps any node in a reference node. This is useful for getting rid of the boilerplate associated with wrapping an {ASTStringLiteral}. * * @param node * @return */ public static ASTReference makeRef(JexlNode node) { ASTReference ref = new ASTReference(ParserTreeConstants.JJTREFERENCE); return children(ref, node); }
} else if (JexlASTHelper.dereference(node) instanceof ASTAssignment) { return super.visit(node, data); } else if (node.jjtGetParent() instanceof ASTAndNode) { ASTAndNode andNode = JexlNodes.newInstanceOfType(((ASTAndNode) (node.jjtGetParent()))); 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); andNode.jjtAddChild(newNode, andNode.jjtGetNumChildren()); } else if (node.jjtGetParent() instanceof ASTOrNode) { ASTOrNode orNode = JexlNodes.newInstanceOfType(((ASTOrNode) (node.jjtGetParent()))); 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); orNode.jjtAddChild(newNode, orNode.jjtGetNumChildren()); } else if (node.jjtGetParent() instanceof ASTNotNode) {
@Override public Object visit(ASTReference node, Object data) { return node.jjtGetChild(0).jjtAccept(this, data); }
/** * Wrap an ASTAndNode or ASTOrNode in parenthesis if it has more than one child. Will return itself if wrapping is unnecessary. * * @param toWrap * @return */ public static JexlNode wrap(JexlNode toWrap) { if ((toWrap instanceof ASTAndNode || toWrap instanceof ASTOrNode) && toWrap.jjtGetNumChildren() > 1) { ASTReference reference = new ASTReference(ParserTreeConstants.JJTREFERENCE); ASTReferenceExpression parens = new ASTReferenceExpression(ParserTreeConstants.JJTREFERENCEEXPRESSION); parens.jjtAddChild(toWrap, 0); toWrap.jjtSetParent(parens); reference.jjtAddChild(parens, 0); parens.jjtSetParent(reference); return reference; } return toWrap; }
@Override public Object visit(ASTReference node, Object data) { if (JexlASTHelper.HasMethodVisitor.hasMethod(node)) { // this reference has a child that is a method return (ASTReference) node.jjtAccept(this.simpleQueryModelVisitor, null); } else { return super.visit(node, data); } }
public Object visit(ASTReference node, Object data) { output.writeLine(data + node.toString()); childrenAccept(node, this, data + PREFIX); return null; }
@Override public Object visit(ASTReference node, Object data) { // if a delayed predicate, then change it to a regular reference if (ASTDelayedPredicate.instanceOf(node)) { JexlNode source = ASTDelayedPredicate.getDelayedPredicateSource(node); JexlNodes.swap(node.jjtGetParent(), node, source); return source; } else if (!ExecutableDeterminationVisitor.isExecutable(node, config, indexedFields, indexOnlyFields, nonEventFields, false, null, helper)) { super.visit(node, data); } return node; }
copy = new ASTReferenceExpression(ParserTreeConstants.JJTREFERENCEEXPRESSION); } else if (ASTReference.class.isAssignableFrom(clz)) { copy = new ASTReference(ParserTreeConstants.JJTREFERENCE); } else if (ASTAdditiveNode.class.isAssignableFrom(clz)) { copy = new ASTAdditiveNode(ParserTreeConstants.JJTADDITIVENODE);
ASTIdentifier loopVariable = (ASTIdentifier) loopReference.jjtGetChild(0); int register = loopVariable.getRegister();
protected static JexlNode buildUntypedDblIdentifierNode(JexlNode newNode, JexlNode identifier1, JexlNode identifier2) { ASTReference identifierReference1 = new ASTReference(ParserTreeConstants.JJTREFERENCE); identifierReference1.jjtAddChild(identifier1, 0); identifier1.jjtSetParent(identifierReference1); ASTReference identifierReference2 = new ASTReference(ParserTreeConstants.JJTREFERENCE); identifierReference2.jjtAddChild(identifier2, 0); identifier2.jjtSetParent(identifierReference2); newNode.jjtAddChild(identifierReference1, 0); newNode.jjtAddChild(identifierReference2, 1); identifierReference1.jjtSetParent(newNode); identifierReference2.jjtSetParent(newNode); return newNode; }
/** * 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(ASTReference node) { // ignore marked nodes if (!QueryPropertyMarkerVisitor.instanceOfAny(node)) { if (node.jjtGetNumChildren() == 1) { JexlNode kid = node.jjtGetChild(0); if (kid instanceof ASTReferenceExpression) { return getLeafNode((ASTReferenceExpression) kid); } } } return null; }
JexlNode reference1 = new ASTReference(2); node1.jjtAddChild(reference1, 0); JexlNode name = new ASTIdentifier(3); reference1.jjtAddChild(name, 0); JexlNode reference2 = new ASTReference(4); node1.jjtAddChild(reference2, 1); JexlNode value = new ASTStringLiteral(5); reference1 = new ASTReference(7); node2.jjtAddChild(reference1, 0); name = new ASTIdentifier(8); reference1.jjtAddChild(name, 0); reference2 = new ASTReference(9); node2.jjtAddChild(reference2, 1); value = new ASTStringLiteral(10);
@Test public void testNormalizeLiteral() throws Throwable { LcNoDiacriticsType normalizer = new LcNoDiacriticsType(); ASTJexlScript script = JexlASTHelper.parseJexlQuery("F == 'aSTrInG'"); if (log.isDebugEnabled()) { PrintingVisitor.printQuery(script); } JexlNode literal = script.jjtGetChild(0).jjtGetChild(1).jjtGetChild(0); ASTReference ref = JexlASTHelper.normalizeLiteral(literal, normalizer); Assert.assertEquals("astring", ref.jjtGetChild(0).image); }
/** * Given the provide newNode, add the fieldName (as an identifier) and the literal * * @param newNode * @param identifier * @param literal * @return */ protected static JexlNode buildUntypedNewNode(JexlNode newNode, ASTIdentifier identifier, JexlNode literal) { ASTReference literalReference = new ASTReference(ParserTreeConstants.JJTREFERENCE), identifierReference = new ASTReference( ParserTreeConstants.JJTREFERENCE); literalReference.jjtAddChild(literal, 0); literal.jjtSetParent(literalReference); identifierReference.jjtAddChild(identifier, 0); identifier.jjtSetParent(identifierReference); newNode.jjtAddChild(identifierReference, 0); newNode.jjtAddChild(literalReference, 1); identifierReference.jjtSetParent(newNode); literalReference.jjtSetParent(newNode); return newNode; }
@Override public Object visit(ASTReference 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; }
final public void LValueVar() throws ParseException { ASTReference jjtn000 = new ASTReference(JJTREFERENCE); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000);
/** * Like {@link #buildUntypedNewNode(JexlNode, ASTIdentifier, String)} except it does not wrap {@code literal} in an {@link ASTReference} * * @param newNode * @param identifier * @param literal * @return */ protected static JexlNode buildUntypedNewLiteralNode(JexlNode newNode, ASTIdentifier identifier, JexlNode literal) { ASTReference identifierReference = new ASTReference(ParserTreeConstants.JJTREFERENCE); identifierReference.jjtAddChild(identifier, 0); identifier.jjtSetParent(identifierReference); newNode.jjtAddChild(identifierReference, 0); newNode.jjtAddChild(literal, 1); identifierReference.jjtSetParent(newNode); literal.jjtSetParent(newNode); return newNode; }