Clover coverage report - Drools - 2.0-rc2
Coverage timestamp: Wed May 11 2005 07:12:26 BST
file stats: LOC: 125   Methods: 1
NCLOC: 71   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
JavaCompiler.java 66.7% 84.2% 100% 78.1%
coverage coverage
 1    package org.drools.semantics.java;
 2   
 3    /*
 4    * $Id: JavaCompiler.java,v 1.7.2.5 2005/05/08 00:57:36 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.IOException;
 45    import java.util.HashMap;
 46   
 47    import org.codehaus.janino.ByteArrayClassLoader;
 48    import org.codehaus.janino.Scanner;
 49   
 50    import org.drools.rule.Declaration;
 51    import org.drools.rule.Rule;
 52    import org.drools.spi.RuleBaseContext;
 53   
 54    class JavaCompiler
 55    {
 56    private static final String[] PARAM_NAMES = new String[]{"tuple", "decls", "drools", "applicationData"};
 57   
 58  209 public static Object compile(Rule rule,
 59    String className,
 60    Class clazz,
 61    String expression,
 62    String originalExpression,
 63    Declaration[] params) throws IOException,
 64    CompilationException,
 65    ClassNotFoundException
 66    {
 67  209 try
 68    {
 69  209 JavaFunctions functions = (JavaFunctions) rule.getRuleSet( ).getFunctions( "java" );
 70  209 Class functionsClass = null;
 71   
 72  209 if ( functions != null )
 73    {
 74  0 functionsClass = functions.getFunctionsClass( );
 75    }
 76   
 77  209 RuleBaseContext ruleBaseContext = rule.getRuleSet( ).getRuleBaseContext( );
 78  209 ClassLoader classLoader = (ClassLoader) ruleBaseContext.get( "java-classLoader" );
 79   
 80  209 if ( classLoader == null )
 81    {
 82  68 ClassLoader cl = (ClassLoader) ruleBaseContext.get( "smf-classLoader" );
 83   
 84  68 if ( cl == null )
 85    {
 86  2 cl = Thread.currentThread( ).getContextClassLoader( );
 87  2 ruleBaseContext.put( "smf-classLoader",
 88    cl );
 89    }
 90   
 91  68 if ( cl == null )
 92    {
 93  0 cl = JavaCompiler.class.getClassLoader( );
 94  0 ruleBaseContext.put( "smf-classLoader",
 95    cl );
 96    }
 97   
 98  68 classLoader = new ByteArrayClassLoader( new HashMap( ),
 99    cl );
 100   
 101  68 ruleBaseContext.put( "java-classLoader",
 102    classLoader );
 103    }
 104   
 105  209 return JavaScriptEvaluator.compile( expression,
 106    className,
 107    clazz,
 108    PARAM_NAMES,
 109    params,
 110    rule.getImporter( ),
 111    rule.getApplicationData( ),
 112    functionsClass,
 113    classLoader );
 114    }
 115    catch ( Scanner.LocatedException e )
 116    {
 117  2 throw new CompilationException( rule.getRuleSet(),
 118    rule,
 119    originalExpression,
 120  2 e.getLocation( ) != null ? e.getLocation( ).getLineNumber( ) : -1,
 121  2 e.getLocation( ) != null ? e.getLocation( ).getColumnNumber( ) : -1,
 122    e.getMessage( ) );
 123    }
 124    }
 125    }