1 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 28 public class ASTAddNode extends SimpleNode { 29 34 public ASTAddNode(int id) { 35 super(id); 36 } 37 38 44 public ASTAddNode(Parser p, int id) { 45 super(p, id); 46 } 47 48 49 52 public Object jjtAccept(ParserVisitor visitor, Object data) { 53 return visitor.visit(this, data); 54 } 55 56 59 public Object value(JexlContext context) throws Exception { 60 Object left = ((SimpleNode) jjtGetChild(0)).value(context); 61 Object right = ((SimpleNode) jjtGetChild(1)).value(context); 62 63 66 if (left == null && right == null) { 67 return new Long (0); 68 } 69 70 74 if (left instanceof Float || left instanceof Double 75 || right instanceof Float || right instanceof Double 76 || (left instanceof String 77 && (((String ) left).indexOf(".") != -1 78 || ((String ) left).indexOf("e") != -1 79 || ((String ) left).indexOf("E") != -1) 80 ) 81 || (right instanceof String 82 && (((String ) right).indexOf(".") != -1 83 || ((String ) right).indexOf("e") != -1 84 || ((String ) right).indexOf("E") != -1) 85 ) 86 ) { 87 88 92 93 try { 94 Double l = Coercion.coerceDouble(left); 95 Double r = Coercion.coerceDouble(right); 96 return new Double (l.doubleValue() + r.doubleValue()); 97 } catch (java.lang.NumberFormatException nfe) { 98 101 return left.toString().concat(right.toString()); 102 } 103 } 104 105 108 try { 109 Long l = Coercion.coerceLong(left); 110 Long r = Coercion.coerceLong(right); 111 return new Long (l.longValue() + r.longValue()); 112 } catch (java.lang.NumberFormatException nfe) { 113 116 return left.toString().concat(right.toString()); 117 } 118 } 119 } 120 | Popular Tags |