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 ASTModNode extends SimpleNode { 29 34 public ASTModNode(int id) { 35 super(id); 36 } 37 38 44 public ASTModNode(Parser p, int id) { 45 super(p, id); 46 } 47 48 49 public Object jjtAccept(ParserVisitor visitor, Object data) { 50 return visitor.visit(this, data); 51 } 52 53 54 public Object value(JexlContext jc) throws Exception { 55 Object left = ((SimpleNode) jjtGetChild(0)).value(jc); 56 Object right = ((SimpleNode) jjtGetChild(1)).value(jc); 57 58 61 if (left == null && right == null) { 62 return new Byte ((byte) 0); 63 } 64 65 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 87 if (r.doubleValue() == 0.0) { 88 return new Double (0.0); 89 } 90 91 return new Double (l.doubleValue() % r.doubleValue()); 92 } 93 94 97 98 Long l = Coercion.coerceLong(left); 99 Long r = Coercion.coerceLong(right); 100 101 104 if (r.longValue() == 0) { 105 return new Long (0); 106 } 107 108 return new Long (l.longValue() % r.longValue()); 109 } 110 111 } 112 | Popular Tags |