1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.jexl.parser;
18
19 import org.apache.commons.jexl.JexlContext;
20 import org.apache.commons.jexl.util.Coercion;
21
22 /***
23 * Bitwise And. Syntax: a & b Result is a {@link Long}
24 *
25 * @author Dion Gillard
26 * @since 1.1
27 */
28 public class ASTBitwiseAndNode extends SimpleNode {
29 /***
30 * Create the node given an id.
31 *
32 * @param id node id.
33 */
34 public ASTBitwiseAndNode(int id) {
35 super(id);
36 }
37
38 /***
39 * Create a node with the given parser and id.
40 *
41 * @param p a parser.
42 * @param id node id.
43 */
44 public ASTBitwiseAndNode(Parser p, int id) {
45 super(p, id);
46 }
47
48 /*** {@inheritDoc} */
49 public Object jjtAccept(ParserVisitor visitor, Object data) {
50 return visitor.visit(this, data);
51 }
52
53 /*** {@inheritDoc} */
54 public Object value(JexlContext context) throws Exception {
55 Object left = ((SimpleNode) jjtGetChild(0)).value(context);
56 Object right = ((SimpleNode) jjtGetChild(1)).value(context);
57
58 Long l = left == null ? new Long(0) : Coercion.coerceLong(left);
59 Long r = right == null ? new Long(0) : Coercion.coerceLong(right);
60 return new Long(l.longValue() & r.longValue());
61 }
62 }