|
janino.net | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.codehaus.commons.compiler.Cookable
org.codehaus.commons.compiler.jdk.SimpleCompiler
org.codehaus.commons.compiler.jdk.ClassBodyEvaluator
org.codehaus.commons.compiler.jdk.ScriptEvaluator
org.codehaus.commons.compiler.jdk.ExpressionEvaluator
public class ExpressionEvaluator
This 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 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 |
| Field Summary |
|---|
| Fields inherited from class org.codehaus.commons.compiler.jdk.ScriptEvaluator |
|---|
optionalOverrideMethod, optionalStaticMethod |
| Fields inherited from interface org.codehaus.commons.compiler.IExpressionEvaluator |
|---|
ANY_TYPE |
| 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 | |
|---|---|
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<?> optionalExtendedType,
Class<?>[] implementedTypes,
ClassLoader optionalParentClassLoader)
Equivalent to ExpressionEvaluator 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); |
|
ExpressionEvaluator(String expression,
Class<?> expressionType,
String[] parameterNames,
Class<?>[] parameterTypes,
Class<?>[] thrownExceptions,
ClassLoader optionalParentClassLoader)
Equivalent to ExpressionEvaluator ee = new ExpressionEvaluator(); ee.setExpressionType(expressionType); ee.setParameters(parameterNames, parameterTypes); ee.setThrownExceptions(thrownExceptions); ee.setParentClassLoader(optionalParentClassLoader); ee.cook(expression); |
|
| Method Summary | |
|---|---|
void |
cook(String[] optionalFileNames,
Reader[] readers)
Same as ICookable.cook(String, Reader), but cooks a set of scripts into one class. |
protected Class<?> |
getDefaultReturnType()
The default return type of an expression is Object. |
void |
setExpressionType(Class expressionType)
Define the type of the expression. |
void |
setExpressionTypes(Class[] expressionTypes)
Same as IExpressionEvaluator.setExpressionType(Class), but for multiple expressions. |
void |
setReturnType(Class returnType)
Deprecated. |
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, getClassLoader, setCompileErrorHandler, setDebuggingInformation, setParentClassLoader, 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, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| 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 |
| 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, setCompileErrorHandler, setDebuggingInformation, setParentClassLoader, setWarningHandler |
| Constructor Detail |
|---|
public 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);
CompileExceptionExpressionEvaluator(),
setExpressionType(Class),
ScriptEvaluator.setParameters(String[], Class[]),
Cookable.cook(String)
public ExpressionEvaluator(String expression,
Class<?> expressionType,
String[] parameterNames,
Class<?>[] parameterTypes,
Class<?>[] thrownExceptions,
ClassLoader optionalParentClassLoader)
throws CompileException
ExpressionEvaluator ee = new ExpressionEvaluator(); ee.setExpressionType(expressionType); ee.setParameters(parameterNames, parameterTypes); ee.setThrownExceptions(thrownExceptions); ee.setParentClassLoader(optionalParentClassLoader); ee.cook(expression);
CompileExceptionExpressionEvaluator(),
setExpressionType(Class),
ScriptEvaluator.setParameters(String[], Class[]),
ScriptEvaluator.setThrownExceptions(Class[]),
SimpleCompiler.setParentClassLoader(ClassLoader),
Cookable.cook(String)
public ExpressionEvaluator(String expression,
Class<?> expressionType,
String[] parameterNames,
Class<?>[] parameterTypes,
Class<?>[] thrownExceptions,
Class<?> optionalExtendedType,
Class<?>[] implementedTypes,
ClassLoader optionalParentClassLoader)
throws CompileException
ExpressionEvaluator 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);
CompileExceptionExpressionEvaluator(),
setExpressionType(Class),
ScriptEvaluator.setParameters(String[], Class[]),
ScriptEvaluator.setThrownExceptions(Class[]),
ClassBodyEvaluator.setExtendedClass(Class),
ClassBodyEvaluator.setImplementedInterfaces(Class[]),
SimpleCompiler.setParentClassLoader(ClassLoader),
Cookable.cook(String)public ExpressionEvaluator()
| Method Detail |
|---|
public void setExpressionType(Class expressionType)
IExpressionEvaluatorIExpressionEvaluator.ANY_TYPE allows the expression
to return any type (primitive or reference).
If expressionType is Void.TYPE, then the expression must be an
invocation of a void method.
Defaults to IExpressionEvaluator.ANY_TYPE.
setExpressionType in interface IExpressionEvaluatorpublic void setExpressionTypes(Class[] expressionTypes)
IExpressionEvaluatorIExpressionEvaluator.setExpressionType(Class), but for multiple expressions.
setExpressionTypes in interface IExpressionEvaluator@Deprecated public final void setReturnType(Class returnType)
IScriptEvaluatornull value is implementation-dependent.
setReturnType in interface IExpressionEvaluatorsetReturnType in interface IScriptEvaluatorsetReturnType in class ScriptEvaluator@Deprecated public final void setReturnTypes(Class[] returnTypes)
IScriptEvaluatornull elements is
implementation-dependent.
setReturnTypes in interface IExpressionEvaluatorsetReturnTypes in interface IScriptEvaluatorsetReturnTypes in class ScriptEvaluatorprotected Class<?> getDefaultReturnType()
Object.
getDefaultReturnType in class ScriptEvaluator
public void cook(String[] optionalFileNames,
Reader[] readers)
throws CompileException,
IOException
IScriptEvaluatorICookable.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 the
optionalFileNames 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.
cook in interface IScriptEvaluatorcook in class ScriptEvaluatorCompileException
IOException
|
janino.net | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||