Coverage report

  %line %branch
org.apache.commons.jexl.parser.ASTAddNode
83% 
100% 

 1  
 /*
 2  
  * Copyright 2002,2004 The Apache Software Foundation.
 3  
  * 
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  * 
 8  
  *      http://www.apache.org/licenses/LICENSE-2.0
 9  
  * 
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 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  
  *  Addition : either integer addition or string concatenation
 24  
  *
 25  
  *  @author <a href="mailto:geirm@apache.org">Geir Magnusson Jr.</a>
 26  
  *  @version $Id: ASTAddNode.java,v 1.7 2004/08/24 02:22:12 dion Exp $
 27  
  */
 28  
 public class ASTAddNode extends SimpleNode
 29  
 {
 30  
     public ASTAddNode(int id)
 31  
     {
 32  0
         super(id);
 33  0
     }
 34  
 
 35  
     public ASTAddNode(Parser p, int id)
 36  
     {
 37  117
         super(p, id);
 38  117
     }
 39  
 
 40  
 
 41  
     /** Accept the visitor. **/
 42  
     public Object jjtAccept(ParserVisitor visitor, Object data)
 43  
     {
 44  0
         return visitor.visit(this, data);
 45  
     }
 46  
 
 47  
     public Object value(JexlContext context)
 48  
         throws Exception
 49  
     {
 50  117
         Object left = ((SimpleNode) jjtGetChild(0)).value(context);
 51  117
         Object right = ((SimpleNode) jjtGetChild(1)).value(context);
 52  
 
 53  
         /*
 54  
          *  the spec says 'and'
 55  
          */
 56  117
         if (left == null && right == class="keyword">null)
 57  9
             return new Long(0);
 58  
 
 59  
         /*
 60  
          *  if anything is float, double or string with ( "." | "E" | "e")
 61  
          *  coerce all to doubles and do it
 62  
          */
 63  108
         if (left instanceof Float || left instanceof Double
 64  
             || right instanceof Float || right instanceof Double
 65  
             || (  left instanceof String
 66  
                   && (  ((String) left).indexOf(".") != -1 ||
 67  
                         ((String) left).indexOf("e") != -1 ||
 68  
                         ((String) left).indexOf("E") != -1 )
 69  
                )
 70  
             || (  right instanceof String
 71  
                   && (  ((String) right).indexOf(".") != -1 ||
 72  
                         ((String) right).indexOf("e") != -1 ||
 73  
                         ((String) right).indexOf("E") != -1)
 74  
                )
 75  
             )
 76  
         {
 77  
 
 78  
             /*
 79  
              * in the event that either is null and not both, then just make the
 80  
              * null a 0
 81  
              */
 82  
 
 83  
             try
 84  
             {
 85  18
                 Double l = left == null ? new Double(0) : Coercion.coerceDouble(left);
 86  0
                 Double r = right == null? new Double(0) : Coercion.coerceDouble(right);
 87  
 
 88  0
                 return new Double(l.doubleValue() + r.doubleValue());
 89  
             }
 90  2
             catch( java.lang.NumberFormatException nfe )
 91  
             {
 92  
                 /*
 93  
                  * Well, use strings!
 94  
                  */
 95  18
                 return left.toString().concat(right.toString());
 96  
             }
 97  
         }
 98  
 
 99  
         /*
 100  
          * attempt to use Longs
 101  
          */
 102  
         try
 103  
         {
 104  90
             Long l = left == null ? new Long(0) : Coercion.coerceLong(left);
 105  81
             Long r = right == null ? new Long(0) : Coercion.coerceLong(right);
 106  
 
 107  81
             return new Long(l.longValue() + r.longValue());
 108  
         }
 109  1
         catch( java.lang.NumberFormatException nfe )
 110  
         {
 111  
             /*
 112  
              * Well, use strings!
 113  
              */
 114  9
             return left.toString().concat(right.toString());
 115  
         }
 116  
     }
 117  
 }

This report is generated by jcoverage, Maven and Maven JCoverage Plugin.