Coverage report

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

 1  
 /*
 2  
  * Copyright 2002-2006 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 java.util.Iterator;
 20  
 
 21  
 import org.apache.commons.jexl.JexlContext;
 22  
 import org.apache.commons.jexl.util.Introspector;
 23  
 import org.apache.commons.jexl.util.introspection.Info;
 24  
 
 25  
 /**
 26  
  * ForEach statement. Syntax: foreach (var in iterable) Statement()
 27  
  * 
 28  
  * @author Dion Gillard
 29  
  * @since 1.1
 30  
  */
 31  
 public class ASTForeachStatement extends SimpleNode {
 32  
     /** dummy velocity info. */
 33  1
     private static final Info DUMMY = new Info("", 1, 1);
 34  
     /** index of the loop variable. */
 35  
     private static final int VAR_INDEX = 0;
 36  
     /** index of the items. */
 37  
     private static final int ITEMS_INDEX = 1;
 38  
     /** index of the code to execute. */
 39  
     private static final int STATEMENT_INDEX = 2;
 40  
 
 41  
 
 42  
     /**
 43  
      * Create the node given an id.
 44  
      * 
 45  
      * @param id node id.
 46  
      */
 47  
     public ASTForeachStatement(int id) {
 48  0
         super(id);
 49  0
     }
 50  
 
 51  
     /**
 52  
      * Create a node with the given parser and id.
 53  
      * 
 54  
      * @param p a parser.
 55  
      * @param id node id.
 56  
      */
 57  
     public ASTForeachStatement(Parser p, int id) {
 58  10
         super(p, id);
 59  10
     }
 60  
 
 61  
     /** {@inheritDoc} */
 62  
     public Object jjtAccept(ParserVisitor visitor, Object data) {
 63  0
         return visitor.visit(this, data);
 64  
     }
 65  
 
 66  
     /** {@inheritDoc} */
 67  
     public Object value(JexlContext jc) throws Exception {
 68  10
         Object result = null;
 69  
         /* first child is the loop variable */
 70  10
         ASTReference loopVariable = (ASTReference) jjtGetChild(VAR_INDEX);
 71  
         /* second child is the variable to iterate */
 72  10
         SimpleNode iterable = (SimpleNode) jjtGetChild(ITEMS_INDEX);
 73  10
         Object iterableValue = iterable.value(jc);
 74  
         // make sure there is a value to iterate on and a statement to execute
 75  10
         if (iterableValue != null && jjtGetNumChildren() >= (STATEMENT_INDEX + 1)) {
 76  
             /* third child is the statement to execute */
 77  8
             SimpleNode statement = (SimpleNode) jjtGetChild(2);
 78  
             // get an iterator for the collection/array etc via the
 79  
             // introspector.
 80  8
             Iterator itemsIterator = Introspector.getUberspect().getIterator(
 81  
                     iterableValue, DUMMY);
 82  123
             while (itemsIterator.hasNext()) {
 83  
                 // set loopVariable to value of iterator
 84  107
                 Object value = itemsIterator.next();
 85  107
                 jc.getVars().put(loopVariable.getRootString(), value);
 86  
                 // execute statement
 87  107
                 result = statement.value(jc);
 88  
             }
 89  
         }
 90  10
         return result;
 91  
     }
 92  
 }

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