janino.net

org.codehaus.janino
Class ScriptEvaluator

java.lang.Object
  extended by org.codehaus.commons.compiler.Cookable
      extended by org.codehaus.janino.SimpleCompiler
          extended by org.codehaus.janino.ClassBodyEvaluator
              extended by org.codehaus.janino.ScriptEvaluator
All Implemented Interfaces:
IClassBodyEvaluator, ICookable, IScriptEvaluator, ISimpleCompiler
Direct Known Subclasses:
ExpressionEvaluator

public class ScriptEvaluator
extends ClassBodyEvaluator
implements IScriptEvaluator

A number of "convenience constructors" exist that execute the setup steps instantly. Their use is discouraged.


Field Summary
protected  boolean[] optionalOverrideMethod
          Whether methods override a method declared by a supertype; null means "none".
protected  Class[] optionalReturnTypes
          The methods' return types; null means "none".
protected  boolean[] optionalStaticMethod
          Whether methods are static; null means "all".
 
Fields inherited from interface org.codehaus.commons.compiler.IClassBodyEvaluator
DEFAULT_CLASS_NAME
 
Fields inherited from interface org.codehaus.commons.compiler.ICookable
BOOT_CLASS_LOADER, SYSTEM_PROPERTY_SOURCE_DEBUGGING_DIR, SYSTEM_PROPERTY_SOURCE_DEBUGGING_ENABLE
 
Constructor Summary
ScriptEvaluator()
          Constructs a script evaluator with all the default settings (return type void
ScriptEvaluator(Scanner scanner, Class optionalExtendedType, Class[] implementedTypes, Class returnType, String[] parameterNames, Class[] parameterTypes, Class[] thrownExceptions, ClassLoader optionalParentClassLoader)
          Equivalent to ScriptEvaluator se = new ScriptEvaluator(); se.setExtendedType(optionalExtendedType); se.setImplementedTypes(implementedTypes); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.setParentClassLoader(optionalParentClassLoader); se.cook(scanner);
ScriptEvaluator(Scanner scanner, Class returnType, String[] parameterNames, Class[] parameterTypes, Class[] thrownExceptions, ClassLoader optionalParentClassLoader)
          Equivalent to ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.setParentClassLoader(optionalParentClassLoader); se.cook(scanner);
ScriptEvaluator(Scanner scanner, String className, Class optionalExtendedType, Class[] implementedTypes, boolean staticMethod, Class returnType, String methodName, String[] parameterNames, Class[] parameterTypes, Class[] thrownExceptions, ClassLoader optionalParentClassLoader)
          Equivalent to ScriptEvaluator se = new ScriptEvaluator(); se.setClassName(className); se.setExtendedType(optionalExtendedType); se.setImplementedTypes(implementedTypes); se.setStaticMethod(staticMethod); se.setReturnType(returnType); se.setMethodName(methodName); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.setParentClassLoader(optionalParentClassLoader); se.cook(scanner);
ScriptEvaluator(String script)
          Equivalent to ScriptEvaluator se = new ScriptEvaluator(); se.cook(script);
ScriptEvaluator(String script, Class returnType)
          Equivalent to ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.cook(script);
ScriptEvaluator(String script, Class returnType, String[] parameterNames, Class[] parameterTypes)
          Equivalent to ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.cook(script);
ScriptEvaluator(String script, Class returnType, String[] parameterNames, Class[] parameterTypes, Class[] thrownExceptions)
          Equivalent to ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.cook(script);
ScriptEvaluator(String optionalFileName, InputStream is, Class returnType, String[] parameterNames, Class[] parameterTypes, Class[] thrownExceptions, ClassLoader optionalParentClassLoader)
          Equivalent to ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.setParentClassLoader(optionalParentClassLoader); se.cook(optionalFileName, is);
ScriptEvaluator(String optionalFileName, Reader reader, Class returnType, String[] parameterNames, Class[] parameterTypes, Class[] thrownExceptions, ClassLoader optionalParentClassLoader)
          Equivalent to ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.setParentClassLoader(optionalParentClassLoader); se.cook(reader);
 
Method Summary
 void cook(Parser[] parsers)
           
 void cook(Reader[] readers)
          Same as ICookable.cook(Reader), but for multiple scripts.
 void cook(Scanner scanner)
          Scans, parses and ompiles a given compilation unit from the given scanner.
 void cook(Scanner[] scanners)
          Like cook(Scanner), but cooks a set of scripts into one class.
 void cook(String[] strings)
          Same as ICookable.cook(String), but for multiple scripts.
 void cook(String[] optionalFileNames, Reader[] readers)
          On a 2 GHz Intel Pentium Core Duo under Windows XP with an IBM 1.4.2 JDK, compiling 10000 expressions "a + b" (integer) takes about 4 seconds and 56 MB of main memory.
 void cook(String[] optionalFileNames, String[] strings)
          Same as ICookable.cook(String, String), but for multiple scripts.
 Object createFastEvaluator(Reader reader, Class interfaceToImplement, String[] parameterNames)
          If the parameter and return types of the expression are known at compile time, then a "fast" script evaluator can be instantiated through this method.
 Object createFastEvaluator(Scanner scanner, Class interfaceToImplement, String[] parameterNames)
          Notice: This method is not declared in IScriptEvaluator, and is hence only available in this implementation of org.codehaus.commons.compiler.
 Object createFastEvaluator(String script, Class interfaceToImplement, String[] parameterNames)
           
static Object createFastScriptEvaluator(Scanner scanner, Class interfaceToImplement, String[] parameterNames, ClassLoader optionalParentClassLoader)
          Deprecated. Use createFastScriptEvaluator(Scanner, String[], String, Class, Class, String[], ClassLoader) instead
static Object createFastScriptEvaluator(Scanner scanner, String[] optionalDefaultImports, String className, Class optionalExtendedClass, Class interfaceToImplement, String[] parameterNames, ClassLoader optionalParentClassLoader)
          Deprecated. Use createFastEvaluator(Scanner,Class,String[]) instead:
static Object createFastScriptEvaluator(Scanner scanner, String className, Class optionalExtendedType, Class interfaceToImplement, String[] parameterNames, ClassLoader optionalParentClassLoader)
          Deprecated. Use createFastScriptEvaluator(Scanner, String[], String, Class, Class, String[], ClassLoader) instead
static Object createFastScriptEvaluator(String script, Class interfaceToImplement, String[] parameterNames)
          Deprecated. Use createFastScriptEvaluator(Scanner, String[], String, Class, Class, String[], ClassLoader) instead
 Object createInstance(Reader reader)
          Don't use.
 Object evaluate(int idx, Object[] arguments)
          Same as IScriptEvaluator.evaluate(Object[]), but for multiple scripts.
 Object evaluate(Object[] arguments)
          Calls the script with concrete parameter values.
protected  Class getDefaultReturnType()
           
 Method getMethod()
          Returns the loaded Method.
 Method getMethod(int idx)
          Same as IScriptEvaluator.getMethod(), but for multiple scripts.
static String[] guessParameterNames(Scanner scanner)
          Guess the names of the parameters used in the given expression.
protected  Java.MethodDeclarator makeMethodDeclaration(Location location, Java.Annotation[] annotations, boolean staticMethod, Class returnType, String methodName, Class[] parameterTypes, String[] parameterNames, Class[] thrownExceptions, List<Java.BlockStatement> statements)
          To the given Java.ClassDeclaration, add A public method declaration with the given return type, name, parameter names and values and thrown exceptions A block
protected  List<Java.BlockStatement> makeStatements(int idx, Parser parser)
          Fills the given block by parsing statements until EOF and adding them to the block.
 void setMethodName(String methodName)
          Define the name of the generated method.
 void setMethodNames(String[] methodNames)
          Same as IScriptEvaluator.setMethodName(String), but for multiple scripts.
 void setOverrideMethod(boolean overrideMethod)
          Defines whether the generated method overrides a methods declared in a supertype.
 void setOverrideMethod(boolean[] overrideMethod)
          Same as IScriptEvaluator.setOverrideMethod(boolean), but for multiple scripts.
 void setParameters(String[][] parameterNames, Class[][] parameterTypes)
          Same as IScriptEvaluator.setParameters(String[], Class[]), but for multiple scripts.
 void setParameters(String[] parameterNames, Class[] parameterTypes)
          Define the names and types of the parameters of the generated method.
 void setReturnType(Class returnType)
          Defines the return types of the generated methods.
 void setReturnTypes(Class[] returnTypes)
          Defines the return types of the generated methods.
 void setStaticMethod(boolean staticMethod)
          Defines whether the generated method should be STATIC or not.
 void setStaticMethod(boolean[] staticMethod)
          Same as IScriptEvaluator.setStaticMethod(boolean), but for multiple scripts.
 void setThrownExceptions(Class[] thrownExceptions)
          Define the exceptions that the generated method may throw.
 void setThrownExceptions(Class[][] thrownExceptions)
          Same as IScriptEvaluator.setThrownExceptions(Class[]), but for multiple scripts.
 
Methods inherited from class org.codehaus.janino.ClassBodyEvaluator
addPackageMemberClassDeclaration, compileToClass, createFastClassBodyEvaluator, createFastClassBodyEvaluator, getClazz, makeCompilationUnit, setClassName, setDefaultImports, setExtendedClass, setExtendedType, setImplementedInterfaces, setImplementedTypes
 
Methods inherited from class org.codehaus.janino.SimpleCompiler
assertNotCooked, classesToTypes, classToType, compileToClassLoader, cook, cook, equals, getClassLoader, hashCode, main, setCompileErrorHandler, setDebuggingInformation, setParentClassLoader, setWarningHandler
 
Methods inherited from class org.codehaus.commons.compiler.Cookable
cook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFile, readString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.codehaus.commons.compiler.IClassBodyEvaluator
getClazz, setClassName, setDefaultImports, setExtendedClass, setExtendedType, setImplementedInterfaces, setImplementedTypes
 
Methods inherited from interface org.codehaus.commons.compiler.ICookable
cook, cook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFile, setCompileErrorHandler, setDebuggingInformation, setParentClassLoader, setWarningHandler
 

Field Detail

optionalOverrideMethod

protected boolean[] optionalOverrideMethod
Whether methods override a method declared by a supertype; null means "none".


optionalStaticMethod

protected boolean[] optionalStaticMethod
Whether methods are static; null means "all".


optionalReturnTypes

protected Class[] optionalReturnTypes
The methods' return types; null means "none".

Constructor Detail

ScriptEvaluator

public ScriptEvaluator(String script)
                throws CompileException
Equivalent to
 ScriptEvaluator se = new ScriptEvaluator();
 se.cook(script);

Throws:
CompileException
See Also:
ScriptEvaluator(), Cookable.cook(String)

ScriptEvaluator

public ScriptEvaluator(String script,
                       Class returnType)
                throws CompileException
Equivalent to
 ScriptEvaluator se = new ScriptEvaluator();
 se.setReturnType(returnType);
 se.cook(script);

Throws:
CompileException
See Also:
ScriptEvaluator(), setReturnType(Class), Cookable.cook(String)

ScriptEvaluator

public ScriptEvaluator(String script,
                       Class returnType,
                       String[] parameterNames,
                       Class[] parameterTypes)
                throws CompileException
Equivalent to
 ScriptEvaluator se = new ScriptEvaluator();
 se.setReturnType(returnType);
 se.setParameters(parameterNames, parameterTypes);
 se.cook(script);

Throws:
CompileException
See Also:
ScriptEvaluator(), setReturnType(Class), setParameters(String[], Class[]), Cookable.cook(String)

ScriptEvaluator

public ScriptEvaluator(String script,
                       Class returnType,
                       String[] parameterNames,
                       Class[] parameterTypes,
                       Class[] thrownExceptions)
                throws CompileException
Equivalent to
 ScriptEvaluator se = new ScriptEvaluator();
 se.setReturnType(returnType);
 se.setParameters(parameterNames, parameterTypes);
 se.setThrownExceptions(thrownExceptions);
 se.cook(script);

Throws:
CompileException
See Also:
ScriptEvaluator(), setReturnType(Class), setParameters(String[], Class[]), setThrownExceptions(Class[]), Cookable.cook(String)

ScriptEvaluator

public ScriptEvaluator(String optionalFileName,
                       InputStream is,
                       Class returnType,
                       String[] parameterNames,
                       Class[] parameterTypes,
                       Class[] thrownExceptions,
                       ClassLoader optionalParentClassLoader)
                throws CompileException,
                       IOException
Equivalent to
 ScriptEvaluator se = new ScriptEvaluator();
 se.setReturnType(returnType);
 se.setParameters(parameterNames, parameterTypes);
 se.setThrownExceptions(thrownExceptions);
 se.setParentClassLoader(optionalParentClassLoader);
 se.cook(optionalFileName, is);

Throws:
CompileException
IOException
See Also:
ScriptEvaluator(), setReturnType(Class), setParameters(String[], Class[]), setThrownExceptions(Class[]), SimpleCompiler.setParentClassLoader(ClassLoader), Cookable.cook(String, InputStream)

ScriptEvaluator

public ScriptEvaluator(String optionalFileName,
                       Reader reader,
                       Class returnType,
                       String[] parameterNames,
                       Class[] parameterTypes,
                       Class[] thrownExceptions,
                       ClassLoader optionalParentClassLoader)
                throws CompileException,
                       IOException
Equivalent to
 ScriptEvaluator se = new ScriptEvaluator();
 se.setReturnType(returnType);
 se.setParameters(parameterNames, parameterTypes);
 se.setThrownExceptions(thrownExceptions);
 se.setParentClassLoader(optionalParentClassLoader);
 se.cook(reader);

Throws:
CompileException
IOException
See Also:
ScriptEvaluator(), setReturnType(Class), setParameters(String[], Class[]), setThrownExceptions(Class[]), SimpleCompiler.setParentClassLoader(ClassLoader), Cookable.cook(String, Reader)

ScriptEvaluator

public ScriptEvaluator(Scanner scanner,
                       Class returnType,
                       String[] parameterNames,
                       Class[] parameterTypes,
                       Class[] thrownExceptions,
                       ClassLoader optionalParentClassLoader)
                throws CompileException,
                       IOException
Equivalent to
 ScriptEvaluator se = new ScriptEvaluator();
 se.setReturnType(returnType);
 se.setParameters(parameterNames, parameterTypes);
 se.setThrownExceptions(thrownExceptions);
 se.setParentClassLoader(optionalParentClassLoader);
 se.cook(scanner);

Throws:
CompileException
IOException
See Also:
ScriptEvaluator(), setReturnType(Class), setParameters(String[], Class[]), setThrownExceptions(Class[]), SimpleCompiler.setParentClassLoader(ClassLoader), Cookable.cook(Reader)

ScriptEvaluator

public ScriptEvaluator(Scanner scanner,
                       Class optionalExtendedType,
                       Class[] implementedTypes,
                       Class returnType,
                       String[] parameterNames,
                       Class[] parameterTypes,
                       Class[] thrownExceptions,
                       ClassLoader optionalParentClassLoader)
                throws CompileException,
                       IOException
Equivalent to
 ScriptEvaluator se = new ScriptEvaluator();
 se.setExtendedType(optionalExtendedType);
 se.setImplementedTypes(implementedTypes);
 se.setReturnType(returnType);
 se.setParameters(parameterNames, parameterTypes);
 se.setThrownExceptions(thrownExceptions);
 se.setParentClassLoader(optionalParentClassLoader);
 se.cook(scanner);

Throws:
CompileException
IOException
See Also:
ScriptEvaluator(), ClassBodyEvaluator.setExtendedClass(Class), ClassBodyEvaluator.setImplementedInterfaces(Class[]), setReturnType(Class), setParameters(String[], Class[]), setThrownExceptions(Class[]), SimpleCompiler.setParentClassLoader(ClassLoader), Cookable.cook(Reader)

ScriptEvaluator

public ScriptEvaluator(Scanner scanner,
                       String className,
                       Class optionalExtendedType,
                       Class[] implementedTypes,
                       boolean staticMethod,
                       Class returnType,
                       String methodName,
                       String[] parameterNames,
                       Class[] parameterTypes,
                       Class[] thrownExceptions,
                       ClassLoader optionalParentClassLoader)
                throws CompileException,
                       IOException
Equivalent to
 ScriptEvaluator se = new ScriptEvaluator();
 se.setClassName(className);
 se.setExtendedType(optionalExtendedType);
 se.setImplementedTypes(implementedTypes);
 se.setStaticMethod(staticMethod);
 se.setReturnType(returnType);
 se.setMethodName(methodName);
 se.setParameters(parameterNames, parameterTypes);
 se.setThrownExceptions(thrownExceptions);
 se.setParentClassLoader(optionalParentClassLoader);
 se.cook(scanner);

Throws:
CompileException
IOException
See Also:
ScriptEvaluator(), ClassBodyEvaluator.setClassName(String), ClassBodyEvaluator.setExtendedClass(Class), ClassBodyEvaluator.setImplementedInterfaces(Class[]), setStaticMethod(boolean), setReturnType(Class), setMethodName(String), setParameters(String[], Class[]), setThrownExceptions(Class[]), SimpleCompiler.setParentClassLoader(ClassLoader), Cookable.cook(Reader)

ScriptEvaluator

public ScriptEvaluator()
Constructs a script evaluator with all the default settings (return type void

Method Detail

setOverrideMethod

public void setOverrideMethod(boolean overrideMethod)
Description copied from interface: IScriptEvaluator
Defines whether the generated method overrides a methods declared in a supertype.

Specified by:
setOverrideMethod in interface IScriptEvaluator

setStaticMethod

public void setStaticMethod(boolean staticMethod)
Description copied from interface: IScriptEvaluator
Defines whether the generated method should be STATIC or not. Defaults to true.

Specified by:
setStaticMethod in interface IScriptEvaluator

setReturnType

public void setReturnType(Class returnType)
Defines the return types of the generated methods.

Specified by:
setReturnType in interface IScriptEvaluator
Parameters:
returnType - The method's return type; null means the "default return type", which is the type returned by getDefaultReturnType() (void.class for ScriptEvaluator and Object.class for ExpressionEvaluator)
See Also:
getDefaultReturnType(), ExpressionEvaluator.getDefaultReturnType()

setMethodName

public void setMethodName(String methodName)
Description copied from interface: IScriptEvaluator
Define the name of the generated method. Defaults to an unspecified name.

Specified by:
setMethodName in interface IScriptEvaluator

setParameters

public void setParameters(String[] parameterNames,
                          Class[] parameterTypes)
Description copied from interface: IScriptEvaluator
Define the names and types of the parameters of the generated method.

names and types must have the same number of elements.

The parameters can be of primitive type, e.g. double.class.

The default is to have zero parameters.

Specified by:
setParameters in interface IScriptEvaluator

setThrownExceptions

public void setThrownExceptions(Class[] thrownExceptions)
Description copied from interface: IScriptEvaluator
Define the exceptions that the generated method may throw.

Specified by:
setThrownExceptions in interface IScriptEvaluator

cook

public final void cook(Scanner scanner)
                throws CompileException,
                       IOException
Description copied from class: SimpleCompiler
Scans, parses and ompiles a given compilation unit from the given scanner. After completion, SimpleCompiler.getClassLoader() returns a ClassLoader that allows for access to the compiled classes.

Overrides:
cook in class ClassBodyEvaluator
Throws:
CompileException
IOException

evaluate

public Object evaluate(Object[] arguments)
                throws InvocationTargetException
Description copied from interface: IScriptEvaluator
Calls the script with concrete parameter values.

Each argument must have the same type as specified through the parameterTypes parameter of IScriptEvaluator.setParameters(String[], Class[]).

Arguments of primitive type must passed with their wrapper class objects.

The object returned has the class as specified through IScriptEvaluator.setReturnType(Class).

This method is thread-safe.

Specified by:
evaluate in interface IScriptEvaluator
Parameters:
arguments - The actual parameter values
Throws:
InvocationTargetException

getMethod

public Method getMethod()
Description copied from interface: IScriptEvaluator
Returns the loaded Method.

This method must only be called after exactly one of the ICookable.cook(String, Reader) methods was called.

Specified by:
getMethod in interface IScriptEvaluator

setOverrideMethod

public void setOverrideMethod(boolean[] overrideMethod)
Description copied from interface: IScriptEvaluator
Same as IScriptEvaluator.setOverrideMethod(boolean), but for multiple scripts.

Specified by:
setOverrideMethod in interface IScriptEvaluator

setStaticMethod

public void setStaticMethod(boolean[] staticMethod)
Description copied from interface: IScriptEvaluator
Same as IScriptEvaluator.setStaticMethod(boolean), but for multiple scripts.

Specified by:
setStaticMethod in interface IScriptEvaluator

setReturnTypes

public void setReturnTypes(Class[] returnTypes)
Defines the return types of the generated methods.

Specified by:
setReturnTypes in interface IScriptEvaluator
Parameters:
returnTypes - The methods' return types; null elements mean the "default return type", which is the type returned by getDefaultReturnType() (void.class for ScriptEvaluator and Object.class for ExpressionEvaluator)
See Also:
getDefaultReturnType(), ExpressionEvaluator.getDefaultReturnType()

setMethodNames

public void setMethodNames(String[] methodNames)
Description copied from interface: IScriptEvaluator
Same as IScriptEvaluator.setMethodName(String), but for multiple scripts.

Define the names of the generated methods. By default the methods have distinct and implementation-specific names.

If two scripts have the same name, then they must have different parameter types (see IScriptEvaluator.setParameters(String[][], Class[][])).

Specified by:
setMethodNames in interface IScriptEvaluator

setParameters

public void setParameters(String[][] parameterNames,
                          Class[][] parameterTypes)
Description copied from interface: IScriptEvaluator
Same as IScriptEvaluator.setParameters(String[], Class[]), but for multiple scripts.

Specified by:
setParameters in interface IScriptEvaluator

setThrownExceptions

public void setThrownExceptions(Class[][] thrownExceptions)
Description copied from interface: IScriptEvaluator
Same as IScriptEvaluator.setThrownExceptions(Class[]), but for multiple scripts.

Specified by:
setThrownExceptions in interface IScriptEvaluator

cook

public final void cook(Scanner[] scanners)
                throws CompileException,
                       IOException
Like cook(Scanner), but cooks a set of scripts into one class. Notice that if any of the scripts causes trouble, the entire compilation will fail. If you need to report which of the scripts causes the exception, you may want to use the optionalFileName argument of Scanner.Scanner(String, Reader) to distinguish between the individual token sources.

On a 2 GHz Intel Pentium Core Duo under Windows XP with an IBM 1.4.2 JDK, compiling 10000 expressions "a + b" (integer) takes about 4 seconds and 56 MB of main memory. The generated class file is 639203 bytes large.

The number and the complexity of the scripts is restricted by the Limitations of the Java Virtual Machine, where the most limiting factor is the 64K entries limit of the constant pool. Since every method with a distinct name requires one entry there, you can define at best 32K (very simple) scripts. If and only if the number of scanners is one, then that single script may contain leading IMPORT directives.

Throws:
IllegalStateException - Any of the preceeding set...() had an array size different from that of scanners
CompileException
IOException

cook

public final void cook(Parser[] parsers)
                throws CompileException,
                       IOException
Throws:
CompileException
IOException
See Also:
cook(Scanner[])

cook

public final void cook(Reader[] readers)
                throws CompileException,
                       IOException
Description copied from interface: IScriptEvaluator
Same as ICookable.cook(Reader), but for multiple scripts.

Specified by:
cook in interface IScriptEvaluator
Throws:
CompileException
IOException

cook

public final void cook(String[] optionalFileNames,
                       Reader[] readers)
                throws CompileException,
                       IOException
On a 2 GHz Intel Pentium Core Duo under Windows XP with an IBM 1.4.2 JDK, compiling 10000 expressions "a + b" (integer) takes about 4 seconds and 56 MB of main memory. The generated class file is 639203 bytes large.

The number and the complexity of the scripts is restricted by the Limitations of the Java Virtual Machine, where the most limiting factor is the 64K entries limit of the constant pool. Since every method with a distinct name requires one entry there, you can define at best 32K (very simple) scripts.

Specified by:
cook in interface IScriptEvaluator
Throws:
CompileException
IOException

cook

public final void cook(String[] strings)
                throws CompileException
Description copied from interface: IScriptEvaluator
Same as ICookable.cook(String), but for multiple scripts.

Specified by:
cook in interface IScriptEvaluator
Throws:
CompileException

cook

public final void cook(String[] optionalFileNames,
                       String[] strings)
                throws CompileException
Description copied from interface: IScriptEvaluator
Same as ICookable.cook(String, String), but for multiple scripts.

Specified by:
cook in interface IScriptEvaluator
Throws:
CompileException

getDefaultReturnType

protected Class getDefaultReturnType()
Returns:
void.class
See Also:
setReturnTypes(Class[])

makeStatements

protected List<Java.BlockStatement> makeStatements(int idx,
                                                   Parser parser)
                                            throws CompileException,
                                                   IOException
Fills the given block by parsing statements until EOF and adding them to the block.

Throws:
CompileException
IOException

makeMethodDeclaration

protected Java.MethodDeclarator makeMethodDeclaration(Location location,
                                                      Java.Annotation[] annotations,
                                                      boolean staticMethod,
                                                      Class returnType,
                                                      String methodName,
                                                      Class[] parameterTypes,
                                                      String[] parameterNames,
                                                      Class[] thrownExceptions,
                                                      List<Java.BlockStatement> statements)
To the given Java.ClassDeclaration, add

Parameters:
returnType - Return type of the declared method

createFastScriptEvaluator

@Deprecated
public static Object createFastScriptEvaluator(String script,
                                                          Class interfaceToImplement,
                                                          String[] parameterNames)
                                        throws CompileException
Deprecated. Use createFastScriptEvaluator(Scanner, String[], String, Class, Class, String[], ClassLoader) instead

Throws:
CompileException

createFastScriptEvaluator

@Deprecated
public static Object createFastScriptEvaluator(Scanner scanner,
                                                          Class interfaceToImplement,
                                                          String[] parameterNames,
                                                          ClassLoader optionalParentClassLoader)
                                        throws CompileException,
                                               IOException
Deprecated. Use createFastScriptEvaluator(Scanner, String[], String, Class, Class, String[], ClassLoader) instead

Throws:
CompileException
IOException

createFastScriptEvaluator

@Deprecated
public static Object createFastScriptEvaluator(Scanner scanner,
                                                          String className,
                                                          Class optionalExtendedType,
                                                          Class interfaceToImplement,
                                                          String[] parameterNames,
                                                          ClassLoader optionalParentClassLoader)
                                        throws CompileException,
                                               IOException
Deprecated. Use createFastScriptEvaluator(Scanner, String[], String, Class, Class, String[], ClassLoader) instead

Throws:
CompileException
IOException

createFastScriptEvaluator

@Deprecated
public static Object createFastScriptEvaluator(Scanner scanner,
                                                          String[] optionalDefaultImports,
                                                          String className,
                                                          Class optionalExtendedClass,
                                                          Class interfaceToImplement,
                                                          String[] parameterNames,
                                                          ClassLoader optionalParentClassLoader)
                                        throws CompileException,
                                               IOException
Deprecated. Use createFastEvaluator(Scanner,Class,String[]) instead:

 ScriptEvaluator se = new ScriptEvaluator();
 se.setDefaultImports.(optionalDefaultImports);
 se.setClassName.(className);
 se.setExtendedClass.(optionalExtendedClass);
 se.setParentClassLoader(optionalParentClassLoader);
 return se.createFastEvaluator(scanner,
 interfaceToImplement, parameterNames);
 

Throws:
CompileException
IOException

createInstance

public final Object createInstance(Reader reader)
Don't use.

Specified by:
createInstance in interface IClassBodyEvaluator
Overrides:
createInstance in class ClassBodyEvaluator
Parameters:
reader - Source of class body tokens
Returns:
An object that extends the optionalExtendedType and implements the given implementedTypes

createFastEvaluator

public Object createFastEvaluator(Reader reader,
                                  Class interfaceToImplement,
                                  String[] parameterNames)
                           throws CompileException,
                                  IOException
Description copied from interface: IScriptEvaluator
If the parameter and return types of the expression are known at compile time, then a "fast" script evaluator can be instantiated through this method.

Script evaluation is faster than through IScriptEvaluator.evaluate(Object[]), because it is not done through reflection but through direct method invocation.

Example:

 public interface Foo {
     int bar(int a, int b);
 }
 ...
 IScriptEvaluator se = CompilerFactoryFactory.getDefaultCompilerFactory().newScriptEvaluator();

 // Optionally configure the SE her:
 se.setClassName("Bar");
 se.setDefaultImports(new String[] { "java.util.*" });
 se.setExtendedClass(SomeOtherClass.class);
 se.setParentClassLoader(someClassLoader);

 Foo f = (Foo) se.createFastScriptEvaluator(
     "return a - b;",
     Foo.class,
     new String[] { "a", "b" }
 );
 System.out.println("1 - 2 = " + f.bar(1, 2));
 
All other configuration (implemented type, static method, return type, method name, parameter names and types, thrown exceptions) are predetermined by the interfaceToImplement. Notice: The interfaceToImplement must either be declared public, or with package scope in the same package as the generated class (see IClassBodyEvaluator.setClassName(String)).

Specified by:
createFastEvaluator in interface IScriptEvaluator
Parameters:
reader - Produces the stream of script tokens
interfaceToImplement - Must declare exactly one method
parameterNames - The names of the parameters of that method
Returns:
An object that implements the given interface
Throws:
CompileException
IOException

createFastEvaluator

public Object createFastEvaluator(String script,
                                  Class interfaceToImplement,
                                  String[] parameterNames)
                           throws CompileException
Specified by:
createFastEvaluator in interface IScriptEvaluator
Parameters:
script - Contains the sequence of script tokens
Throws:
CompileException
See Also:
IScriptEvaluator.createFastEvaluator(Reader, Class, String[])

createFastEvaluator

public Object createFastEvaluator(Scanner scanner,
                                  Class interfaceToImplement,
                                  String[] parameterNames)
                           throws CompileException,
                                  IOException
Notice: This method is not declared in IScriptEvaluator, and is hence only available in this implementation of org.codehaus.commons.compiler. To be independent from this particular implementation, try to switch to createFastEvaluator(Reader, Class, String[]).

Parameters:
scanner - Source of tokens to read
Throws:
CompileException
IOException
See Also:
createFastEvaluator(Reader, Class, String[])

guessParameterNames

public static String[] guessParameterNames(Scanner scanner)
                                    throws CompileException,
                                           IOException
Guess the names of the parameters used in the given expression. The strategy is to look at all "ambiguous names" in the expression (e.g. in "a.b.c.d()", the ambiguous name is "a.b.c"), and then at the components of the ambiguous name.

Throws:
CompileException
IOException
See Also:
Scanner.Scanner(String, Reader)

evaluate

public Object evaluate(int idx,
                       Object[] arguments)
                throws InvocationTargetException
Description copied from interface: IScriptEvaluator
Same as IScriptEvaluator.evaluate(Object[]), but for multiple scripts.

Specified by:
evaluate in interface IScriptEvaluator
Throws:
InvocationTargetException

getMethod

public Method getMethod(int idx)
Description copied from interface: IScriptEvaluator
Same as IScriptEvaluator.getMethod(), but for multiple scripts.

Specified by:
getMethod in interface IScriptEvaluator

janino.net