Author: sebb Date: Thu Aug 13 13:36:56 2009 New Revision: 803878 URL: http://svn.apache.org/viewvc?rev=803878&view=rev Log: Fix bug in value of BIGD_DOUBLE_MIN_VALUE Javadoc corrections
Modified: commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/JexlArithmetic.java Modified: commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/JexlArithmetic.java URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/JexlArithmetic.java?rev=803878&r1=803877&r2=803878&view=diff ============================================================================== --- commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/JexlArithmetic.java (original) +++ commons/proper/jexl/branches/2.0/src/main/java/org/apache/commons/jexl/JexlArithmetic.java Thu Aug 13 13:36:56 2009 @@ -24,10 +24,10 @@ * @since 2.0 */ public class JexlArithmetic { - /** Integer.MAX_VALUE as BigDecimal. */ + /** Double.MAX_VALUE as BigDecimal. */ protected static final BigDecimal BIGD_DOUBLE_MAX_VALUE = BigDecimal.valueOf(Double.MAX_VALUE); - /** Integer.MIN_VALUE as BigDecimal. */ - protected static final BigDecimal BIGD_DOUBLE_MIN_VALUE = BigDecimal.valueOf(-Double.MAX_VALUE); + /** Double.MIN_VALUE as BigDecimal. */ + protected static final BigDecimal BIGD_DOUBLE_MIN_VALUE = BigDecimal.valueOf(Double.MIN_VALUE); /** Long.MAX_VALUE as BigInteger. */ protected static final BigInteger BIGI_LONG_MAX_VALUE = BigInteger.valueOf(Long.MAX_VALUE); /** Long.MIN_VALUE as BigInteger. */ @@ -63,7 +63,7 @@ /** * The result of +,/,-,*,% when both operands are null. - * @return Long(0) + * @return null if strict, else Long(0) */ protected Object controlNullNullOperands() { return strict? null : Long.valueOf(0); @@ -82,10 +82,11 @@ * Add two values together. * Rules are:<ol> * <li>If both are null, result is 0</li> - * <li>If either are floating point numbers, coerce to BigDecimals - * and add together</li> - * <li>Else treat as BigIntegers and add together</li> - * <li>If either numeric add fails on coercion to the appropriate type, + * <li>If either is a floating point number, coerce both to Double and add together</li> + * <li>If both are BigInteger, treat as BigInteger and add together</li> + * <li>If either is a BigDecimal, coerce both to BigDecimal and add together</li> + * <li>Else treat as BigInteger and add together</li> + * <li>If any numeric add fails on coercion to the appropriate type, * treat as Strings and do concatenation</li> * </ol> * @param left first value @@ -132,12 +133,15 @@ /** * Divide the left value by the right. * Rules are:<ol> - * <li>If both are null, result is 0</li> - * <li>Treat as BigDecimals and divide</li> + * <li>If both are null, result is Long(0)</li> + * <li>If both are BigInteger, return result of BigInteger divide</li> + * <li>If both are BigDecimal, return result of BigDecimal divide (rounded up if necessary to fit the scale)</li> + * <li>Else treat as Doubles and divide</li> * </ol> * @param left first value * @param right second value - * @return left - right. + * @return left / right + * @throws ArithmeticException if right == 0 */ public Object divide(Object left, Object right) { if (left == null && right == null) { @@ -171,11 +175,15 @@ * left value mod right. * Rules are:<ol> * <li>If both are null, result is 0</li> - * <li>Treat both as BigIntegers and perform modulus</li> + * <li>If either is a floating point number, treat both as double and perform modulus, returning Double</li> + * <li>If both are BigInteger numbers, treat as BigInteger and perform modulus, returning BigInteger</li> + * <li>If either is a BigDecimal number, coerce both to BigDecimal and perform modulus, returning BigDecimal</li> + * <li>Else treat both as BigInteger and perform modulus, returning Number: BigInteger or Long(if in range)</li> * </ol> * @param left first value * @param right second value - * @return left mod right. + * @return left mod right + * @throws ArithmeticException if right == 0.0 */ public Object mod(Object left, Object right) { if (left == null && right == null) { @@ -218,12 +226,12 @@ /** * Multiply the left value by the right. * Rules are:<ol> - * <li>If both are null, result is 0</li> - * <li>If either are floating point numbers, coerce to BigDecimals - * and multiply</li> - * <li>Else treat as BigIntegers and multiply</li> - * <li>If either numeric operation fails on coercion to the appropriate type, - * treat as Strings and do concatenation</li> + * <li>If both are null, result is null(strict) or Long(0)</li> + * <li>If either are floating point numbers, coerce to double + * and multiply, returning Double</li> + * <li>If both are BigInteger numbers, treat as BigInteger and perform multiply, returning BigInteger</li> + * <li>If either is a BigDecimal number, coerce both to BigDecimal and perform multiply, returning BigDecimal</li> + * <li>Else treat both as BigInteger and perform multiply, returning Number: BigInteger or Long(if in range)</li> * </ol> * @param left first value * @param right second value @@ -265,15 +273,15 @@ * Subtract the right value from the left. * Rules are:<ol> * <li>If both are null, result is 0</li> - * <li>If either are floating point numbers, coerce to BigDecimals - * and subtract</li> - * <li>Else treat as BigIntegers and subtract</li> - * <li>If either numeric operation fails on coercion to the appropriate type, - * treat as Strings and do concatenation</li> + * <li>If either are floating point numbers, coerce to double + * and subtract, returning Double</li> + * <li>If both are BigInteger numbers, treat as BigInteger and subtract, returning BigInteger</li> + * <li>If either is a BigDecimal number, coerce both to BigDecimal and subtract, returning BigDecimal</li> + * <li>Else treat both as BigInteger and subtract, returning Number: BigInteger or Long(if in range)</li> * </ol> * @param left first value * @param right second value - * @return left + right. + * @return left - right. */ public Object subtract(Object left, Object right) { if (left == null && right == null) { @@ -458,7 +466,7 @@ * Coerce to a boolean (not a java.lang.Boolean). * * @param val Object to be coerced. - * @return The Boolean coerced value, or false if none possible. + * @return The boolean coerced value, or false if none possible. */ public boolean toBoolean(Object val) { if (val == null) { @@ -474,10 +482,10 @@ } /** - * Coerce to a Integer. + * Coerce to a int. * * @param val Object to be coerced. - * @return The Integer coerced value. + * @return The int coerced value. */ public int toInteger(Object val) { if (val == null) { @@ -505,7 +513,7 @@ * Coerce to a long (not a java.lang.Long). * * @param val Object to be coerced. - * @return The Long coerced value. + * @return The long coerced value. */ public long toLong(Object val) { if (val == null) { @@ -532,6 +540,7 @@ * Null and empty string maps to zero. * @param val the object to be coerced. * @return a BigDecimal. + * @throws NullPointerException if val is null and mode is strict. */ public BigInteger toBigInteger(Object val) { if (val instanceof BigInteger) { @@ -561,6 +570,7 @@ * Null and empty string maps to zero. * @param val the object to be coerced. * @return a BigDecimal. + * @throws NullPointerException if val is null and mode is strict. */ public BigDecimal toBigDecimal(Object val) { if (val instanceof BigDecimal) { @@ -589,7 +599,8 @@ * Coerce to a double. * * @param val Object to be coerced. - * @return The Double coerced value. + * @return The double coerced value. + * @throws NullPointerException if val is null and mode is strict. */ public double toDouble(Object val) { if (val == null) { @@ -626,6 +637,7 @@ * * @param val Object to be coerced. * @return The String coerced value. + * @throws NullPointerException if val is null and mode is strict. */ public String toString(Object val) { if (val == null) {