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 * Multiplication.
24 *
25 * @author <a href="mailto:geirm@apache.org">Geir Magnusson Jr.</a>
26 * @version $Id: ASTMulNode.java 398206 2006-04-29 16:51:38Z dion $
27 */
28 public class ASTMulNode extends SimpleNode {
29 /***
30 * Create the node given an id.
31 *
32 * @param id node id.
33 */
34 public ASTMulNode(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 ASTMulNode(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
59
60
61 if (left == null && right == null) {
62 return new Byte((byte) 0);
63 }
64
65
66
67
68
69 if (left instanceof Float
70 || left instanceof Double
71 || right instanceof Float
72 || right instanceof Double
73 || (left instanceof String
74 && (((String) left).indexOf(".") != -1
75 || ((String) left).indexOf("e") != -1
76 || ((String) left).indexOf("E") != -1))
77 || (right instanceof String
78 && (((String) right).indexOf(".") != -1
79 || ((String) right).indexOf("e") != -1
80 || ((String) right).indexOf("E") != -1))) {
81 Double l = Coercion.coerceDouble(left);
82 Double r = Coercion.coerceDouble(right);
83
84 return new Double(l.doubleValue() * r.doubleValue());
85 }
86
87
88
89
90
91 Long l = Coercion.coerceLong(left);
92 Long r = Coercion.coerceLong(right);
93
94 return new Long(l.longValue() * r.longValue());
95 }
96
97 }