You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ge...@apache.org on 2003/12/17 13:49:35 UTC

cvs commit: jakarta-commons/jexl/src/java/org/apache/commons/jexl/parser ASTAddNode.java

geirm       2003/12/17 04:49:35

  Modified:    jexl/src/java/org/apache/commons/jexl/parser ASTAddNode.java
  Log:
  Patch from Robert McIntosh to add string contat via "+".  Not totally sure if
  we want it this way...  but lets see what people thingk.
  
  Also fixed problem that should have been there when one arg to an + is null.
  
  Revision  Changes    Path
  1.4       +26 -11    jakarta-commons/jexl/src/java/org/apache/commons/jexl/parser/ASTAddNode.java
  
  Index: ASTAddNode.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jexl/src/java/org/apache/commons/jexl/parser/ASTAddNode.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ASTAddNode.java	9 Oct 2003 21:28:55 -0000	1.3
  +++ ASTAddNode.java	17 Dec 2003 12:49:35 -0000	1.4
  @@ -98,7 +98,7 @@
            *  if anything is float, double or string with ( "." | "E" | "e")
            *  coerce all to doubles and do it
            */
  -        if ( left instanceof Float || left instanceof Double
  +        if (left instanceof Float || left instanceof Double
               || right instanceof Float || right instanceof Double
               || (  left instanceof String
                     && (  ((String) left).indexOf(".") != -1 ||
  @@ -108,23 +108,38 @@
               || (  right instanceof String
                     && (  ((String) right).indexOf(".") != -1 ||
                           ((String) right).indexOf("e") != -1 ||
  -                        ((String) right).indexOf("E") != -1 )
  +                        ((String) right).indexOf("E") != -1)
                  )
               )
           {
  -            Double l = Coercion.coerceDouble(left);
  -            Double r = Coercion.coerceDouble(right);
   
  -            return new Double( l.doubleValue() + r.doubleValue() );
  +            /*
  +             * in the event that either is null and not both, then just make the
  +             * null a 0
  +             */
  +
  +            Double l = left == null ? new Double(0) : Coercion.coerceDouble(left);
  +            Double r = right == null? new Double(0) : Coercion.coerceDouble(right);
  +
  +            return new Double(l.doubleValue() + r.doubleValue());
           }
   
           /*
  -         * otherwise to longs with thee!
  +         * attempt to use Longs
            */
  +        try
  +        {
  +            Long l = left == null ? new Long(0) : Coercion.coerceLong(left);
  +            Long r = right == null ? new Long(0) : Coercion.coerceLong(right);
   
  -        Long l = Coercion.coerceLong(left);
  -        Long r = Coercion.coerceLong(right);
  -
  -        return new Long(l.longValue() + r.longValue());
  +            return new Long(l.longValue() + r.longValue());
  +        }
  +        catch( java.lang.NumberFormatException nfe )
  +        {
  +            /*
  +             * Well, use strings!
  +             */
  +            return left.toString().concat(right.toString());
  +        }
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org