Clover coverage report - Drools - 2.0-rc2
Coverage timestamp: Wed May 11 2005 07:12:26 BST
file stats: LOC: 152   Methods: 3
NCLOC: 51   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
JavaExprAnalyzer.java 100% 100% 100% 100%
coverage
 1    package org.drools.semantics.java;
 2   
 3    /*
 4    * $Id: JavaExprAnalyzer.java,v 1.2 2005/02/04 02:13:38 mproctor Exp $
 5    *
 6    * Copyright 2002 (C) The Werken Company. All Rights Reserved.
 7    *
 8    * Redistribution and use of this software and associated documentation
 9    * ("Software"), with or without modification, are permitted provided that the
 10    * following conditions are met:
 11    *
 12    * 1. Redistributions of source code must retain copyright statements and
 13    * notices. Redistributions must also contain a copy of this document.
 14    *
 15    * 2. Redistributions in binary form must reproduce the above copyright notice,
 16    * this list of conditions and the following disclaimer in the documentation
 17    * and/or other materials provided with the distribution.
 18    *
 19    * 3. The name "drools" must not be used to endorse or promote products derived
 20    * from this Software without prior written permission of The Werken Company.
 21    * For written permission, please contact bob@werken.com.
 22    *
 23    * 4. Products derived from this Software may not be called "drools" nor may
 24    * "drools" appear in their names without prior written permission of The Werken
 25    * Company. "drools" is a registered trademark of The Werken Company.
 26    *
 27    * 5. Due credit should be given to The Werken Company.
 28    * (http://drools.werken.com/).
 29    *
 30    * THIS SOFTWARE IS PROVIDED BY THE WERKEN COMPANY AND CONTRIBUTORS ``AS IS''
 31    * AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 32    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 33    * ARE DISCLAIMED. IN NO EVENT SHALL THE WERKEN COMPANY OR ITS CONTRIBUTORS BE
 34    * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 35    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 36    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 37    * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 38    * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 39    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 40    * POSSIBILITY OF SUCH DAMAGE.
 41    *
 42    */
 43   
 44    import java.io.StringReader;
 45    import java.util.ArrayList;
 46    import java.util.HashSet;
 47    import java.util.Iterator;
 48    import java.util.List;
 49    import java.util.Set;
 50   
 51    import org.drools.rule.Declaration;
 52    import org.drools.semantics.java.parser.JavaLexer;
 53    import org.drools.semantics.java.parser.JavaRecognizer;
 54    import org.drools.semantics.java.parser.JavaTreeParser;
 55   
 56    import antlr.RecognitionException;
 57    import antlr.TokenStreamException;
 58    import antlr.collections.AST;
 59    /**
 60    * Expression analyzer.
 61    *
 62    * @author <a href="mailto:bob@eng.werken.com">bob mcwhirter </a>
 63    */
 64    public class JavaExprAnalyzer
 65    {
 66    // ------------------------------------------------------------
 67    // Constructors
 68    // ------------------------------------------------------------
 69   
 70    /**
 71    * Construct.
 72    */
 73  126 public JavaExprAnalyzer()
 74    {
 75    // intentionally left blank.
 76    }
 77   
 78    // ------------------------------------------------------------
 79    // Instance methods
 80    // ------------------------------------------------------------
 81   
 82    /**
 83    * Analyze an expression.
 84    *
 85    * @param expr The expression to analyze.
 86    * @param availDecls Total set of declarations available.
 87    *
 88    * @return The <code>Set</code> of declarations used by the expression.
 89    *
 90    * @throws TokenStreamException If an error occurs in the lexer.
 91    * @throws RecognitionException If an error occurs in the parser.
 92    * @throws MissingDeclarationException If the expression requires a
 93    * declaration not present in the available declarations.
 94    */
 95  126 public List analyze( String expr,
 96    List availDecls )
 97    throws TokenStreamException, RecognitionException, MissingDeclarationException
 98    {
 99  126 JavaLexer lexer = new JavaLexer( new StringReader( expr ) );
 100  126 JavaRecognizer parser = new JavaRecognizer( lexer );
 101   
 102  126 parser.ruleCondition( );
 103   
 104  126 AST ast = parser.getAST( );
 105   
 106  126 return analyze( availDecls, ast );
 107    }
 108   
 109    /**
 110    * Analyze an expression.
 111    *
 112    * @param availDecls Total set of declarations available.
 113    * @param ast The AST for the expression.
 114    *
 115    * @return The <code>Set</code> of declarations used by the expression.
 116    *
 117    * @throws RecognitionException If an error occurs in the parser.
 118    */
 119  126 private List analyze( List availDecls,
 120    AST ast ) throws RecognitionException
 121    {
 122  126 JavaTreeParser treeParser = new JavaTreeParser( );
 123   
 124  126 treeParser.init( );
 125   
 126  126 treeParser.exprCondition( ast );
 127   
 128  126 Set refs = new HashSet( treeParser.getVariableReferences( ) );
 129   
 130  126 List decls = new ArrayList( );
 131   
 132  126 Iterator declIter = availDecls.iterator( );
 133  126 Declaration eachDecl;
 134   
 135  126 while ( declIter.hasNext( ) )
 136    {
 137  285 eachDecl = ( Declaration ) declIter.next( );
 138   
 139  285 if ( refs.contains( eachDecl.getIdentifier( ) ) )
 140    {
 141  203 decls.add( eachDecl );
 142  203 refs.remove( eachDecl.getIdentifier( ) );
 143    }
 144    }
 145   
 146    /*
 147    * if ( ! refs.isEmpty() ) { throw new MissingDeclarationException(
 148    * expr, (String) refs.iterator().next() ); }
 149    */
 150  126 return decls;
 151    }
 152    }