public class ExpressionEvaluator extends MultiCookable implements IExpressionEvaluator
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 createFastEvaluator(String, Class, String[]). Expression evaluation is faster
than through 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 expression
Notice: 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 |
(How can it be that interface method invocation is slower than reflection for the server JVM?)
ANY_TYPE, DEFAULT_CLASS_NAME, DEFAULT_EXPRESSION_TYPE| Constructor and Description |
|---|
ExpressionEvaluator() |
ExpressionEvaluator(String expression,
Class<?> expressionType,
String[] parameterNames,
Class<?>[] parameterTypes)
Equivalent to
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.cook(expression);
|
ExpressionEvaluator(String expression,
Class<?> expressionType,
String[] parameterNames,
Class<?>[] parameterTypes,
Class<?>[] thrownExceptions,
Class<?> extendedType,
Class<?>[] implementedTypes,
ClassLoader parentClassLoader)
Equivalent to
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.setThrownExceptions(thrownExceptions);
ee.setExtendedType(extendedType);
ee.setImplementedTypes(implementedTypes);
ee.setParentClassLoader(parentClassLoader);
ee.cook(expression);
|
ExpressionEvaluator(String expression,
Class<?> expressionType,
String[] parameterNames,
Class<?>[] parameterTypes,
Class<?>[] thrownExceptions,
ClassLoader parentClassLoader)
Equivalent to
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.setThrownExceptions(thrownExceptions);
ee.setParentClassLoader(parentClassLoader);
ee.cook(expression);
|
| Modifier and Type | Method and Description |
|---|---|
void |
cook(String[] fileNames,
Reader[] readers) |
void |
cook(String fileName,
Reader reader) |
<T> T |
createFastEvaluator(Reader reader,
Class<? extends T> interfaceToImplement,
String... parameterNames) |
<T> T |
createFastEvaluator(String expression,
Class<? extends T> interfaceToImplement,
String... parameterNames) |
Object |
evaluate(int idx,
Object... arguments) |
Object |
evaluate(Object... arguments) |
Map<String,byte[]> |
getBytecodes() |
Class<?> |
getClazz() |
Class<?> |
getDefaultExpressionType() |
String[] |
getDefaultImports() |
Method |
getMethod() |
Method |
getMethod(int idx) |
Method[] |
getResult() |
void |
setClassName(String className) |
void |
setCompileErrorHandler(ErrorHandler compileErrorHandler) |
void |
setDebuggingInformation(boolean debugSource,
boolean debugLines,
boolean debugVars) |
void |
setDefaultExpressionType(Class<?> defaultExpressionType) |
void |
setDefaultImports(String... defaultImports) |
void |
setExpressionType(Class<?> expressionType) |
void |
setExpressionTypes(Class<?>[] expressionTypes) |
void |
setExtendedClass(Class<?> extendedType) |
void |
setImplementedInterfaces(Class<?>[] implementedTypes) |
void |
setMethodName(String methodName) |
void |
setMethodNames(String[] methodNames) |
void |
setOverrideMethod(boolean overrideMethod) |
void |
setOverrideMethod(boolean[] overrideMethod) |
void |
setParameters(String[][] parameterNames,
Class<?>[][] parameterTypes) |
void |
setParameters(String[] parameterNames,
Class<?>[] parameterTypes) |
void |
setParentClassLoader(ClassLoader parentClassLoader) |
void |
setReturnType(Class<?> returnType) |
void |
setSourceVersion(int version) |
void |
setStaticMethod(boolean staticMethod) |
void |
setStaticMethod(boolean[] staticMethod) |
void |
setTargetVersion(int version) |
void |
setThrownExceptions(Class<?>[] thrownExceptions) |
void |
setThrownExceptions(Class<?>[][] thrownExceptions) |
void |
setWarningHandler(WarningHandler warningHandler) |
cook, cook, cook, cook, cook, cook, cook, cookFiles, cookFiles, cookFiles, cookFilescook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFileclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic ExpressionEvaluator(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes) throws CompileException
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.cook(expression);
public ExpressionEvaluator(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes, Class<?>[] thrownExceptions, @Nullable ClassLoader parentClassLoader) throws CompileException
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.setThrownExceptions(thrownExceptions);
ee.setParentClassLoader(parentClassLoader);
ee.cook(expression);
public ExpressionEvaluator(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes, Class<?>[] thrownExceptions, @Nullable Class<?> extendedType, Class<?>[] implementedTypes, @Nullable ClassLoader parentClassLoader) throws CompileException
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.setThrownExceptions(thrownExceptions);
ee.setExtendedType(extendedType);
ee.setImplementedTypes(implementedTypes);
ee.setParentClassLoader(parentClassLoader);
ee.cook(expression);
CompileExceptionExpressionEvaluator(),
setExpressionType(Class),
ScriptEvaluator.setParameters(String[], Class[]),
ScriptEvaluator.setThrownExceptions(Class[]),
ClassBodyEvaluator.setExtendedClass(Class),
ClassBodyEvaluator.setImplementedInterfaces(Class[]),
SimpleCompiler.setParentClassLoader(ClassLoader),
Cookable.cook(String)public ExpressionEvaluator()
public void setParentClassLoader(@Nullable ClassLoader parentClassLoader)
setParentClassLoader in interface IExpressionEvaluatorpublic void setDebuggingInformation(boolean debugSource,
boolean debugLines,
boolean debugVars)
setDebuggingInformation in interface IExpressionEvaluatorpublic void setSourceVersion(int version)
setSourceVersion in interface ICookablepublic void setTargetVersion(int version)
setTargetVersion in interface ICookablepublic void setCompileErrorHandler(@Nullable ErrorHandler compileErrorHandler)
setCompileErrorHandler in interface IExpressionEvaluatorpublic void setWarningHandler(@Nullable WarningHandler warningHandler)
setWarningHandler in interface IExpressionEvaluatorpublic void setDefaultImports(String... defaultImports)
setDefaultImports in interface IExpressionEvaluatorpublic String[] getDefaultImports()
getDefaultImports in interface IExpressionEvaluatorpublic void setDefaultExpressionType(Class<?> defaultExpressionType)
setDefaultExpressionType in interface IExpressionEvaluatorpublic Class<?> getDefaultExpressionType()
getDefaultExpressionType in interface IExpressionEvaluatorpublic void setImplementedInterfaces(Class<?>[] implementedTypes)
setImplementedInterfaces in interface IExpressionEvaluatorpublic void setReturnType(Class<?> returnType)
setReturnType in interface IExpressionEvaluatorpublic void setExpressionType(Class<?> expressionType)
setExpressionType in interface IExpressionEvaluatorpublic void setExpressionTypes(Class<?>[] expressionTypes)
setExpressionTypes in interface IExpressionEvaluatorpublic void setOverrideMethod(boolean overrideMethod)
setOverrideMethod in interface IExpressionEvaluatorpublic void setOverrideMethod(boolean[] overrideMethod)
setOverrideMethod in interface IExpressionEvaluatorpublic void setParameters(String[] parameterNames, Class<?>[] parameterTypes)
setParameters in interface IExpressionEvaluatorpublic void setParameters(String[][] parameterNames, Class<?>[][] parameterTypes)
setParameters in interface IExpressionEvaluatorpublic void setClassName(String className)
setClassName in interface IExpressionEvaluatorpublic void setExtendedClass(@Nullable Class<?> extendedType)
setExtendedClass in interface IExpressionEvaluatorpublic void setStaticMethod(boolean staticMethod)
setStaticMethod in interface IExpressionEvaluatorpublic void setStaticMethod(boolean[] staticMethod)
setStaticMethod in interface IExpressionEvaluatorpublic void setMethodName(String methodName)
setMethodName in interface IExpressionEvaluatorpublic void setMethodNames(String[] methodNames)
setMethodNames in interface IExpressionEvaluatorpublic void setThrownExceptions(Class<?>[] thrownExceptions)
setThrownExceptions in interface IExpressionEvaluatorpublic void setThrownExceptions(Class<?>[][] thrownExceptions)
setThrownExceptions in interface IExpressionEvaluatorpublic void cook(@Nullable String fileName, Reader reader) throws CompileException, IOException
cook in interface ICookablecook in class CookableCompileExceptionIOExceptionpublic void cook(String[] fileNames, Reader[] readers) throws CompileException, IOException
cook in interface IMultiCookablecook in class MultiCookableCompileExceptionIOException@Nullable public Object evaluate(@Nullable Object... arguments) throws InvocationTargetException
evaluate in interface IExpressionEvaluatorInvocationTargetException@Nullable public Object evaluate(int idx, @Nullable Object... arguments) throws InvocationTargetException
evaluate in interface IExpressionEvaluatorInvocationTargetExceptionpublic Method getMethod()
getMethod in interface IExpressionEvaluatorpublic Method getMethod(int idx)
getMethod in interface IExpressionEvaluatorpublic Class<?> getClazz()
getClazz in interface IExpressionEvaluatorpublic Method[] getResult()
getResult in interface IExpressionEvaluatorpublic Map<String,byte[]> getBytecodes()
getBytecodes in interface ICookablepublic <T> T createFastEvaluator(String expression, Class<? extends T> interfaceToImplement, String... parameterNames) throws CompileException
createFastEvaluator in interface IExpressionEvaluatorCompileExceptionpublic <T> T createFastEvaluator(Reader reader, Class<? extends T> interfaceToImplement, String... parameterNames) throws CompileException, IOException
createFastEvaluator in interface IExpressionEvaluatorCompileExceptionIOExceptionCopyright © 2022. All rights reserved.