public class ScriptEvaluator extends ClassBodyEvaluator implements IScriptEvaluator
| Modifier and Type | Field and Description |
|---|---|
private java.lang.String[] |
optionalMethodNames |
protected boolean[] |
optionalOverrideMethod
Whether methods override a method declared by a supertype;
null means "none". |
private java.lang.String[][] |
optionalParameterNames |
private java.lang.Class[][] |
optionalParameterTypes |
protected java.lang.Class[] |
optionalReturnTypes
The methods' return types;
null means "none". |
protected boolean[] |
optionalStaticMethod
Whether methods are static;
null means "all". |
private java.lang.Class[][] |
optionalThrownExceptions |
private java.lang.reflect.Method[] |
result |
DEFAULT_CLASS_NAMEBOOT_CLASS_LOADER, SYSTEM_PROPERTY_SOURCE_DEBUGGING_DIR, SYSTEM_PROPERTY_SOURCE_DEBUGGING_ENABLE| Constructor and Description |
|---|
ScriptEvaluator()
Constructs a script evaluator with all the default settings (return type
void |
ScriptEvaluator(Scanner scanner,
java.lang.Class optionalExtendedType,
java.lang.Class[] implementedTypes,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes,
java.lang.Class[] thrownExceptions,
java.lang.ClassLoader optionalParentClassLoader)
Equivalent to
|
ScriptEvaluator(Scanner scanner,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes,
java.lang.Class[] thrownExceptions,
java.lang.ClassLoader optionalParentClassLoader)
Equivalent to
|
ScriptEvaluator(Scanner scanner,
java.lang.String className,
java.lang.Class optionalExtendedType,
java.lang.Class[] implementedTypes,
boolean staticMethod,
java.lang.Class returnType,
java.lang.String methodName,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes,
java.lang.Class[] thrownExceptions,
java.lang.ClassLoader optionalParentClassLoader)
Equivalent to
|
ScriptEvaluator(java.lang.String script)
Equivalent to
|
ScriptEvaluator(java.lang.String script,
java.lang.Class returnType)
Equivalent to
|
ScriptEvaluator(java.lang.String script,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes)
Equivalent to
|
ScriptEvaluator(java.lang.String script,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes,
java.lang.Class[] thrownExceptions)
Equivalent to
|
ScriptEvaluator(java.lang.String optionalFileName,
java.io.InputStream is,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes,
java.lang.Class[] thrownExceptions,
java.lang.ClassLoader optionalParentClassLoader)
Equivalent to
|
ScriptEvaluator(java.lang.String optionalFileName,
java.io.Reader reader,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes,
java.lang.Class[] thrownExceptions,
java.lang.ClassLoader optionalParentClassLoader)
Equivalent to
|
| Modifier and Type | Method and Description |
|---|---|
void |
cook(Parser[] parsers) |
void |
cook(java.io.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(java.lang.String[] strings)
Same as
ICookable.cook(String), but for multiple scripts. |
void |
cook(java.lang.String[] optionalFileNames,
java.io.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(java.lang.String[] optionalFileNames,
java.lang.String[] strings)
Same as
ICookable.cook(String, String), but for multiple scripts. |
java.lang.Object |
createFastEvaluator(java.io.Reader reader,
java.lang.Class interfaceToImplement,
java.lang.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.
|
java.lang.Object |
createFastEvaluator(Scanner scanner,
java.lang.Class interfaceToImplement,
java.lang.String[] parameterNames)
Notice: This method is not declared in
IScriptEvaluator, and is hence only available in this
implementation of org.codehaus.commons.compiler. |
java.lang.Object |
createFastEvaluator(java.lang.String script,
java.lang.Class interfaceToImplement,
java.lang.String[] parameterNames) |
static java.lang.Object |
createFastScriptEvaluator(Scanner scanner,
java.lang.Class interfaceToImplement,
java.lang.String[] parameterNames,
java.lang.ClassLoader optionalParentClassLoader)
Deprecated.
|
static java.lang.Object |
createFastScriptEvaluator(Scanner scanner,
java.lang.String[] optionalDefaultImports,
java.lang.String className,
java.lang.Class optionalExtendedClass,
java.lang.Class interfaceToImplement,
java.lang.String[] parameterNames,
java.lang.ClassLoader optionalParentClassLoader)
Deprecated.
Use
createFastEvaluator(Scanner,Class,String[]) instead: |
static java.lang.Object |
createFastScriptEvaluator(Scanner scanner,
java.lang.String className,
java.lang.Class optionalExtendedType,
java.lang.Class interfaceToImplement,
java.lang.String[] parameterNames,
java.lang.ClassLoader optionalParentClassLoader)
Deprecated.
|
static java.lang.Object |
createFastScriptEvaluator(java.lang.String script,
java.lang.Class interfaceToImplement,
java.lang.String[] parameterNames)
Deprecated.
|
java.lang.Object |
createInstance(java.io.Reader reader)
Don't use.
|
java.lang.Object |
evaluate(int idx,
java.lang.Object[] arguments)
Same as
IScriptEvaluator.evaluate(Object[]), but for multiple scripts. |
java.lang.Object |
evaluate(java.lang.Object[] arguments)
Calls the script with concrete parameter values.
|
protected java.lang.Class |
getDefaultReturnType() |
java.lang.reflect.Method |
getMethod()
Returns the loaded
Method. |
java.lang.reflect.Method |
getMethod(int idx)
Same as
IScriptEvaluator.getMethod(), but for multiple scripts. |
static java.lang.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,
java.lang.Class returnType,
java.lang.String methodName,
java.lang.Class[] parameterTypes,
java.lang.String[] parameterNames,
java.lang.Class[] thrownExceptions,
java.util.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 java.util.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(java.lang.String methodName)
Define the name of the generated method.
|
void |
setMethodNames(java.lang.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(java.lang.String[][] parameterNames,
java.lang.Class[][] parameterTypes)
Same as
IScriptEvaluator.setParameters(String[], Class[]), but for multiple scripts. |
void |
setParameters(java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes)
Define the names and types of the parameters of the generated method.
|
void |
setReturnType(java.lang.Class returnType)
Defines the return types of the generated methods.
|
void |
setReturnTypes(java.lang.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(java.lang.Class[] thrownExceptions)
Define the exceptions that the generated method may throw.
|
void |
setThrownExceptions(java.lang.Class[][] thrownExceptions)
Same as
IScriptEvaluator.setThrownExceptions(Class[]), but for multiple scripts. |
addPackageMemberClassDeclaration, compileToClass, createFastClassBodyEvaluator, createFastClassBodyEvaluator, getClazz, makeCompilationUnit, setClassName, setDefaultImports, setExtendedClass, setExtendedType, setImplementedInterfaces, setImplementedTypesassertNotCooked, classesToTypes, classToType, compileToClassLoader, cook, cook, equals, getClassLoader, hashCode, main, setCompileErrorHandler, setDebuggingInformation, setParentClassLoader, setWarningHandlercook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFile, readStringclone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitgetClazz, setClassName, setDefaultImports, setExtendedClass, setExtendedType, setImplementedInterfaces, setImplementedTypescook, cook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFile, setCompileErrorHandler, setDebuggingInformation, setParentClassLoader, setWarningHandlerprotected boolean[] optionalOverrideMethod
null means "none".protected boolean[] optionalStaticMethod
null means "all".protected java.lang.Class[] optionalReturnTypes
null means "none".private java.lang.String[] optionalMethodNames
private java.lang.String[][] optionalParameterNames
private java.lang.Class[][] optionalParameterTypes
private java.lang.Class[][] optionalThrownExceptions
private java.lang.reflect.Method[] result
public ScriptEvaluator(java.lang.String script)
throws CompileException
ScriptEvaluator se = new ScriptEvaluator(); se.cook(script);
CompileExceptionScriptEvaluator(),
Cookable.cook(String)public ScriptEvaluator(java.lang.String script,
java.lang.Class returnType)
throws CompileException
ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.cook(script);
CompileExceptionScriptEvaluator(),
setReturnType(Class),
Cookable.cook(String)public ScriptEvaluator(java.lang.String script,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes)
throws CompileException
ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.cook(script);
public ScriptEvaluator(java.lang.String script,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes,
java.lang.Class[] thrownExceptions)
throws CompileException
ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.cook(script);
public ScriptEvaluator(java.lang.String optionalFileName,
java.io.InputStream is,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes,
java.lang.Class[] thrownExceptions,
java.lang.ClassLoader optionalParentClassLoader)
throws CompileException,
java.io.IOException
ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.setParentClassLoader(optionalParentClassLoader); se.cook(optionalFileName, is);
CompileExceptionjava.io.IOExceptionScriptEvaluator(),
setReturnType(Class),
setParameters(String[], Class[]),
setThrownExceptions(Class[]),
SimpleCompiler.setParentClassLoader(ClassLoader),
Cookable.cook(String, InputStream)public ScriptEvaluator(java.lang.String optionalFileName,
java.io.Reader reader,
java.lang.Class returnType,
java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes,
java.lang.Class[] thrownExceptions,
java.lang.ClassLoader optionalParentClassLoader)
throws CompileException,
java.io.IOException
ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.setParentClassLoader(optionalParentClassLoader); se.cook(reader);
CompileExceptionjava.io.IOExceptionScriptEvaluator(),
setReturnType(Class),
setParameters(String[], Class[]),
setThrownExceptions(Class[]),
SimpleCompiler.setParentClassLoader(ClassLoader),
Cookable.cook(String, Reader)public ScriptEvaluator(Scanner scanner, java.lang.Class returnType, java.lang.String[] parameterNames, java.lang.Class[] parameterTypes, java.lang.Class[] thrownExceptions, java.lang.ClassLoader optionalParentClassLoader) throws CompileException, java.io.IOException
ScriptEvaluator se = new ScriptEvaluator(); se.setReturnType(returnType); se.setParameters(parameterNames, parameterTypes); se.setThrownExceptions(thrownExceptions); se.setParentClassLoader(optionalParentClassLoader); se.cook(scanner);
CompileExceptionjava.io.IOExceptionScriptEvaluator(),
setReturnType(Class),
setParameters(String[], Class[]),
setThrownExceptions(Class[]),
SimpleCompiler.setParentClassLoader(ClassLoader),
Cookable.cook(Reader)public ScriptEvaluator(Scanner scanner, java.lang.Class optionalExtendedType, java.lang.Class[] implementedTypes, java.lang.Class returnType, java.lang.String[] parameterNames, java.lang.Class[] parameterTypes, java.lang.Class[] thrownExceptions, java.lang.ClassLoader optionalParentClassLoader) throws CompileException, java.io.IOException
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);
CompileExceptionjava.io.IOExceptionScriptEvaluator(),
ClassBodyEvaluator.setExtendedClass(Class),
ClassBodyEvaluator.setImplementedInterfaces(Class[]),
setReturnType(Class),
setParameters(String[], Class[]),
setThrownExceptions(Class[]),
SimpleCompiler.setParentClassLoader(ClassLoader),
Cookable.cook(Reader)public ScriptEvaluator(Scanner scanner, java.lang.String className, java.lang.Class optionalExtendedType, java.lang.Class[] implementedTypes, boolean staticMethod, java.lang.Class returnType, java.lang.String methodName, java.lang.String[] parameterNames, java.lang.Class[] parameterTypes, java.lang.Class[] thrownExceptions, java.lang.ClassLoader optionalParentClassLoader) throws CompileException, java.io.IOException
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);
CompileExceptionjava.io.IOExceptionScriptEvaluator(),
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)public ScriptEvaluator()
voidpublic void setOverrideMethod(boolean overrideMethod)
IScriptEvaluatorsetOverrideMethod in interface IScriptEvaluatorpublic void setStaticMethod(boolean staticMethod)
IScriptEvaluatortrue.setStaticMethod in interface IScriptEvaluatorpublic void setReturnType(java.lang.Class returnType)
setReturnType in interface IScriptEvaluatorreturnType - 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)getDefaultReturnType(),
ExpressionEvaluator.getDefaultReturnType()public void setMethodName(java.lang.String methodName)
IScriptEvaluatorsetMethodName in interface IScriptEvaluatorpublic void setParameters(java.lang.String[] parameterNames,
java.lang.Class[] parameterTypes)
IScriptEvaluator
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.
setParameters in interface IScriptEvaluatorpublic void setThrownExceptions(java.lang.Class[] thrownExceptions)
IScriptEvaluatorsetThrownExceptions in interface IScriptEvaluatorpublic final void cook(Scanner scanner) throws CompileException, java.io.IOException
SimpleCompilerSimpleCompiler.getClassLoader() returns a ClassLoader that allows for access to the compiled classes.cook in class ClassBodyEvaluatorCompileExceptionjava.io.IOExceptionpublic java.lang.Object evaluate(java.lang.Object[] arguments)
throws java.lang.reflect.InvocationTargetException
IScriptEvaluator
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.
evaluate in interface IScriptEvaluatorarguments - The actual parameter valuesjava.lang.reflect.InvocationTargetExceptionpublic java.lang.reflect.Method getMethod()
IScriptEvaluatorMethod.
This method must only be called after exactly one of the ICookable.cook(String, Reader)
methods was called.
getMethod in interface IScriptEvaluatorpublic void setOverrideMethod(boolean[] overrideMethod)
IScriptEvaluatorIScriptEvaluator.setOverrideMethod(boolean), but for multiple scripts.setOverrideMethod in interface IScriptEvaluatorpublic void setStaticMethod(boolean[] staticMethod)
IScriptEvaluatorIScriptEvaluator.setStaticMethod(boolean), but for multiple scripts.setStaticMethod in interface IScriptEvaluatorpublic void setReturnTypes(java.lang.Class[] returnTypes)
setReturnTypes in interface IScriptEvaluatorreturnTypes - 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)getDefaultReturnType(),
ExpressionEvaluator.getDefaultReturnType()public void setMethodNames(java.lang.String[] methodNames)
IScriptEvaluatorIScriptEvaluator.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[][])).
setMethodNames in interface IScriptEvaluatorpublic void setParameters(java.lang.String[][] parameterNames,
java.lang.Class[][] parameterTypes)
IScriptEvaluatorIScriptEvaluator.setParameters(String[], Class[]), but for multiple scripts.setParameters in interface IScriptEvaluatorpublic void setThrownExceptions(java.lang.Class[][] thrownExceptions)
IScriptEvaluatorIScriptEvaluator.setThrownExceptions(Class[]), but for multiple scripts.setThrownExceptions in interface IScriptEvaluatorpublic final void cook(Scanner[] scanners) throws CompileException, java.io.IOException
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(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.
java.lang.IllegalStateException - Any of the preceeding set...() had an array size different from that
of scannersCompileExceptionjava.io.IOExceptionpublic final void cook(Parser[] parsers) throws CompileException, java.io.IOException
CompileExceptionjava.io.IOExceptioncook(Scanner[])public final void cook(java.io.Reader[] readers)
throws CompileException,
java.io.IOException
IScriptEvaluatorICookable.cook(Reader), but for multiple scripts.cook in interface IScriptEvaluatorCompileExceptionjava.io.IOExceptionpublic final void cook(java.lang.String[] optionalFileNames,
java.io.Reader[] readers)
throws CompileException,
java.io.IOException
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.
cook in interface IScriptEvaluatorCompileExceptionjava.io.IOExceptionpublic final void cook(java.lang.String[] strings)
throws CompileException
IScriptEvaluatorICookable.cook(String), but for multiple scripts.cook in interface IScriptEvaluatorCompileExceptionpublic final void cook(java.lang.String[] optionalFileNames,
java.lang.String[] strings)
throws CompileException
IScriptEvaluatorICookable.cook(String, String), but for multiple scripts.cook in interface IScriptEvaluatorCompileExceptionprotected java.lang.Class getDefaultReturnType()
void.classsetReturnTypes(Class[])protected java.util.List<Java.BlockStatement> makeStatements(int idx, Parser parser) throws CompileException, java.io.IOException
block by parsing statements until EOF and adding them to the block.CompileExceptionjava.io.IOExceptionprotected Java.MethodDeclarator makeMethodDeclaration(Location location, Java.Annotation[] annotations, boolean staticMethod, java.lang.Class returnType, java.lang.String methodName, java.lang.Class[] parameterTypes, java.lang.String[] parameterNames, java.lang.Class[] thrownExceptions, java.util.List<Java.BlockStatement> statements)
Java.ClassDeclaration, add
returnType - Return type of the declared method@Deprecated
public static java.lang.Object createFastScriptEvaluator(java.lang.String script,
java.lang.Class interfaceToImplement,
java.lang.String[] parameterNames)
throws CompileException
createFastScriptEvaluator(Scanner, String[], String, Class, Class, String[],
ClassLoader) insteadCompileException@Deprecated public static java.lang.Object createFastScriptEvaluator(Scanner scanner, java.lang.Class interfaceToImplement, java.lang.String[] parameterNames, java.lang.ClassLoader optionalParentClassLoader) throws CompileException, java.io.IOException
createFastScriptEvaluator(Scanner, String[], String, Class, Class, String[],
ClassLoader) insteadCompileExceptionjava.io.IOException@Deprecated public static java.lang.Object createFastScriptEvaluator(Scanner scanner, java.lang.String className, java.lang.Class optionalExtendedType, java.lang.Class interfaceToImplement, java.lang.String[] parameterNames, java.lang.ClassLoader optionalParentClassLoader) throws CompileException, java.io.IOException
createFastScriptEvaluator(Scanner, String[], String, Class, Class, String[],
ClassLoader) insteadCompileExceptionjava.io.IOException@Deprecated public static java.lang.Object createFastScriptEvaluator(Scanner scanner, java.lang.String[] optionalDefaultImports, java.lang.String className, java.lang.Class optionalExtendedClass, java.lang.Class interfaceToImplement, java.lang.String[] parameterNames, java.lang.ClassLoader optionalParentClassLoader) throws CompileException, java.io.IOException
createFastEvaluator(Scanner,Class,String[]) instead:ScriptEvaluatorse = newScriptEvaluator(); se.setDefaultImports.(optionalDefaultImports); se.setClassName.(className); se.setExtendedClass.(optionalExtendedClass); se.setParentClassLoader(optionalParentClassLoader); return se.createFastEvaluator(scanner, interfaceToImplement, parameterNames);
CompileExceptionjava.io.IOExceptionpublic final java.lang.Object createInstance(java.io.Reader reader)
createInstance in interface IClassBodyEvaluatorcreateInstance in class ClassBodyEvaluatorreader - Source of class body tokensoptionalExtendedType and implements the given
implementedTypespublic java.lang.Object createFastEvaluator(java.io.Reader reader,
java.lang.Class interfaceToImplement,
java.lang.String[] parameterNames)
throws CompileException,
java.io.IOException
IScriptEvaluator
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)).createFastEvaluator in interface IScriptEvaluatorreader - Produces the stream of script tokensinterfaceToImplement - Must declare exactly one methodparameterNames - The names of the parameters of that methodCompileExceptionjava.io.IOExceptionpublic java.lang.Object createFastEvaluator(java.lang.String script,
java.lang.Class interfaceToImplement,
java.lang.String[] parameterNames)
throws CompileException
createFastEvaluator in interface IScriptEvaluatorscript - Contains the sequence of script tokensCompileExceptionIScriptEvaluator.createFastEvaluator(Reader, Class, String[])public java.lang.Object createFastEvaluator(Scanner scanner, java.lang.Class interfaceToImplement, java.lang.String[] parameterNames) throws CompileException, java.io.IOException
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[]).scanner - Source of tokens to readCompileExceptionjava.io.IOExceptioncreateFastEvaluator(Reader, Class, String[])public static java.lang.String[] guessParameterNames(Scanner scanner) throws CompileException, java.io.IOException
CompileExceptionjava.io.IOExceptionScanner(String, Reader)public java.lang.Object evaluate(int idx,
java.lang.Object[] arguments)
throws java.lang.reflect.InvocationTargetException
IScriptEvaluatorIScriptEvaluator.evaluate(Object[]), but for multiple scripts.evaluate in interface IScriptEvaluatorjava.lang.reflect.InvocationTargetExceptionpublic java.lang.reflect.Method getMethod(int idx)
IScriptEvaluatorIScriptEvaluator.getMethod(), but for multiple scripts.getMethod in interface IScriptEvaluator