Class ExpressionEvaluator
- All Implemented Interfaces:
IClassBodyEvaluator
,ICookable
,IExpressionEvaluator
,IScriptEvaluator
,ISimpleCompiler
IExpressionEvaluator
is implemented by creating and compiling a temporary compilation unit defining one
class with one static method with one RETURN statement.
A number of "convenience constructors" exist that execute the set-up steps described for IExpressionEvaluator
instantly.
If the parameter and return types of the expression are known at compile time, then a "fast" expression evaluator can
be instantiated through ScriptEvaluator.createFastEvaluator(String, Class, String[])
. Expression evaluation is faster than
through ScriptEvaluator.evaluate(Object[])
, because it is not done through reflection but through direct method invocation.
Example:
public interface Foo { int bar(int a, int b); } ... Foo f = (Foo) ExpressionEvaluator.createFastExpressionEvaluator( "a + b", // expression to evaluate Foo.class, // interface that describes the expression's signature new String[] { "a", "b" }, // the parameters' names (ClassLoader) null // Use current thread's context class loader ); System.out.println("1 + 2 = " + f.bar(1, 2)); // Evaluate the expressionNotice: The
interfaceToImplement
must either be declared public
,
or with package scope in the root package (i.e. "no" package).
On my system (Intel P4, 2 GHz, MS Windows XP, JDK 1.4.1), expression "x + 1" evaluates as follows:
Server JVM | Client JVM | |
---|---|---|
Normal EE | 23.7 ns | 64.0 ns |
Fast EE | 31.2 ns | 42.2 ns |
-
Field Summary
Fields inherited from class org.codehaus.commons.compiler.jdk.ScriptEvaluator
optionalMethodNames, optionalOverrideMethod, optionalParameterNames, optionalParameterTypes, optionalReturnTypes, optionalStaticMethod, optionalThrownExceptions
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
Fields inherited from interface org.codehaus.commons.compiler.IExpressionEvaluator
ANY_TYPE
-
Constructor Summary
ConstructorsConstructorDescriptionExpressionEvaluator
(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes) Equivalent toExpressionEvaluator
(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes, Class<?>[] thrownExceptions, Class<?> optionalExtendedType, Class<?>[] implementedTypes, ClassLoader optionalParentClassLoader) Equivalent toExpressionEvaluator
(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes, Class<?>[] thrownExceptions, ClassLoader optionalParentClassLoader) Equivalent to -
Method Summary
Modifier and TypeMethodDescriptionvoid
Same asICookable.cook(String, Reader)
, but cooks a set of scripts into one class.protected Class<?>
void
setExpressionType
(Class expressionType) Define the type of the expression.void
setExpressionTypes
(Class[] expressionTypes) Same asIExpressionEvaluator.setExpressionType(Class)
, but for multiple expressions.final void
setReturnType
(Class returnType) Deprecated.final void
setReturnTypes
(Class[] returnTypes) Deprecated.Methods inherited from class org.codehaus.commons.compiler.jdk.ScriptEvaluator
cook, cook, cook, cook, cook, createFastEvaluator, createFastEvaluator, createInstance, evaluate, evaluate, getMethod, getMethod, setMethodName, setMethodNames, setOverrideMethod, setOverrideMethod, setParameters, setParameters, setStaticMethod, setStaticMethod, setThrownExceptions, setThrownExceptions
Methods inherited from class org.codehaus.commons.compiler.jdk.ClassBodyEvaluator
cook, getClazz, parseImportDeclarations, setClassName, setDefaultImports, setExtendedClass, setExtendedType, setImplementedInterfaces, setImplementedTypes
Methods inherited from class org.codehaus.commons.compiler.jdk.SimpleCompiler
assertCooked, assertNotCooked, cook, getClassLoader, setDebuggingInformation, setParentClassLoader, setParentClassLoader
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, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.codehaus.commons.compiler.IClassBodyEvaluator
createInstance, 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, setDebuggingInformation, setParentClassLoader
Methods inherited from interface org.codehaus.commons.compiler.IExpressionEvaluator
createFastEvaluator, createFastEvaluator, evaluate
Methods inherited from interface org.codehaus.commons.compiler.IScriptEvaluator
cook, cook, cook, evaluate, getMethod, getMethod, setMethodName, setMethodNames, setOverrideMethod, setOverrideMethod, setParameters, setParameters, setStaticMethod, setStaticMethod, setThrownExceptions, setThrownExceptions
-
Constructor Details
-
ExpressionEvaluator
public ExpressionEvaluator(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes) throws CompileException Equivalent toExpressionEvaluator ee = new ExpressionEvaluator(); ee.setExpressionType(expressionType); ee.setParameters(parameterNames, parameterTypes); ee.cook(expression);
-
ExpressionEvaluator
public ExpressionEvaluator(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes, Class<?>[] thrownExceptions, ClassLoader optionalParentClassLoader) throws CompileException Equivalent toExpressionEvaluator ee = new ExpressionEvaluator(); ee.setExpressionType(expressionType); ee.setParameters(parameterNames, parameterTypes); ee.setThrownExceptions(thrownExceptions); ee.setParentClassLoader(optionalParentClassLoader); ee.cook(expression);
-
ExpressionEvaluator
public ExpressionEvaluator(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes, Class<?>[] thrownExceptions, Class<?> optionalExtendedType, Class<?>[] implementedTypes, ClassLoader optionalParentClassLoader) throws CompileException Equivalent toExpressionEvaluator ee = new ExpressionEvaluator(); ee.setExpressionType(expressionType); ee.setParameters(parameterNames, parameterTypes); ee.setThrownExceptions(thrownExceptions); ee.setExtendedType(optionalExtendedType); ee.setImplementedTypes(implementedTypes); ee.setParentClassLoader(optionalParentClassLoader); ee.cook(expression);
- Throws:
CompileException
- See Also:
-
ExpressionEvaluator()
setExpressionType(Class)
ScriptEvaluator.setParameters(String[], Class[])
ScriptEvaluator.setThrownExceptions(Class[])
ClassBodyEvaluator.setExtendedClass(Class)
ClassBodyEvaluator.setImplementedInterfaces(Class[])
SimpleCompiler.setParentClassLoader(ClassLoader)
Cookable.cook(String)
-
ExpressionEvaluator
public ExpressionEvaluator()
-
-
Method Details
-
setExpressionType
Description copied from interface:IExpressionEvaluator
Define the type of the expression. The special typeIExpressionEvaluator.ANY_TYPE
allows the expression to return any type (primitive or reference).If
expressionType
isVoid.TYPE
, then the expression must be an invocation of avoid
method.Defaults to
IExpressionEvaluator.ANY_TYPE
.- Specified by:
setExpressionType
in interfaceIExpressionEvaluator
-
setExpressionTypes
Description copied from interface:IExpressionEvaluator
Same asIExpressionEvaluator.setExpressionType(Class)
, but for multiple expressions.- Specified by:
setExpressionTypes
in interfaceIExpressionEvaluator
-
setReturnType
Deprecated.Description copied from interface:IScriptEvaluator
Defines the return type of the generated method. The meaning of anull
value is implementation-dependent.- Specified by:
setReturnType
in interfaceIExpressionEvaluator
- Specified by:
setReturnType
in interfaceIScriptEvaluator
- Overrides:
setReturnType
in classScriptEvaluator
-
setReturnTypes
Deprecated.Description copied from interface:IScriptEvaluator
Defines the return types of the generated methods. The meaning ofnull
values is implementation-dependent.- Specified by:
setReturnTypes
in interfaceIExpressionEvaluator
- Specified by:
setReturnTypes
in interfaceIScriptEvaluator
- Overrides:
setReturnTypes
in classScriptEvaluator
-
getDefaultReturnType
- Overrides:
getDefaultReturnType
in classScriptEvaluator
-
cook
Description copied from interface:IScriptEvaluator
Same asICookable.cook(String, Reader)
, 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 theoptionalFileNames
parameter to distinguish between the individual token sources.If and only if the number of scanners is one, then that single script may contain leading IMPORT directives.
- Specified by:
cook
in interfaceIScriptEvaluator
- Overrides:
cook
in classScriptEvaluator
- Throws:
CompileException
IOException
-