|
janino.net | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
org.codehaus.commons.compiler.Cookable
org.codehaus.janino.SimpleCompiler
org.codehaus.janino.ClassBodyEvaluator
org.codehaus.janino.ScriptEvaluator
org.codehaus.janino.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
createFastExpressionEvaluator(String, Class, String[], ClassLoader). 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.janino.ScriptEvaluator |
|---|
optionalOverrideMethod, optionalReturnTypes, 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(Scanner scanner,
className,
optionalExtendedType,
[] implementedTypes,
boolean staticMethod,
expressionType,
methodName,
[] parameterNames,
[] parameterTypes,
[] thrownExceptions,
optionalParentClassLoader)
Equivalent to ExpressionEvaluator ee = new ExpressionEvaluator(); ee.setClassName(className); ee.setExtendedType(optionalExtendedType); ee.setImplementedTypes(implementedTypes); ee.setStaticMethod(staticMethod); ee.setExpressionType(expressionType); ee.setMethodName(methodName); ee.setParameters(parameterNames, parameterTypes); ee.setThrownExceptions(thrownExceptions); ee.setParentClassLoader(optionalParentClassLoader); ee.cook(scanner); |
|
ExpressionEvaluator( expression,
expressionType,
[] parameterNames,
[] parameterTypes)
Equivalent to ExpressionEvaluator ee = new ExpressionEvaluator(); ee.setExpressionType(expressionType); ee.setParameters(parameterNames, parameterTypes); ee.cook(expression); |
|
ExpressionEvaluator( expression,
expressionType,
[] parameterNames,
[] parameterTypes,
[] thrownExceptions,
optionalExtendedType,
[] implementedTypes,
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( expression,
expressionType,
[] parameterNames,
[] parameterTypes,
[] thrownExceptions,
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 | |
|---|---|
static |
createFastExpressionEvaluator(Scanner scanner,
[] optionalDefaultImports,
className,
optionalExtendedType,
interfaceToImplement,
[] parameterNames,
optionalParentClassLoader)
Deprecated. Use ScriptEvaluator.createFastEvaluator(Reader, Class, String[]) instead |
static |
createFastExpressionEvaluator(Scanner scanner,
className,
optionalExtendedType,
interfaceToImplement,
[] parameterNames,
optionalParentClassLoader)
Deprecated. Use ScriptEvaluator.createFastEvaluator(Reader, Class, String[]) instead |
static |
createFastExpressionEvaluator( expression,
interfaceToImplement,
[] parameterNames,
optionalParentClassLoader)
Deprecated. Use ScriptEvaluator.createFastEvaluator(String, Class, String[]) instead: |
protected |
getDefaultReturnType()
|
static [] |
guessParameterNames(Scanner scanner)
Guess the names of the parameters used in the given expression. |
protected <Java.BlockStatement> |
makeStatements(int idx,
Parser parser)
Fills the given block by parsing statements until EOF and adding them to the block. |
void |
setExpressionType( expressionType)
Define the type of the expression. |
void |
setExpressionTypes([] expressionTypes)
Same as IExpressionEvaluator.setExpressionType(Class), but for multiple expressions. |
void |
setReturnType( returnType)
Deprecated. setExpressionType(Class) should be called instead. |
void |
setReturnTypes([] returnTypes)
Deprecated. setExpressionTypes(Class[]) should be called instead. |
| Methods inherited from class org.codehaus.janino.ScriptEvaluator |
|---|
cook, cook, cook, cook, cook, cook, cook, createFastEvaluator, createFastEvaluator, createFastEvaluator, createFastScriptEvaluator, createFastScriptEvaluator, createFastScriptEvaluator, createFastScriptEvaluator, createInstance, evaluate, evaluate, getMethod, getMethod, makeMethodDeclaration, setMethodName, setMethodNames, setOverrideMethod, setOverrideMethod, setParameters, setParameters, setStaticMethod, setStaticMethod, setThrownExceptions, setThrownExceptions |
| 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. |
|---|
, , , , , , , , |
| Methods inherited from interface org.codehaus.commons.compiler.IExpressionEvaluator |
|---|
createFastEvaluator, createFastEvaluator, evaluate |
| Methods inherited from interface org.codehaus.commons.compiler.IScriptEvaluator |
|---|
cook, 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( expression,
expressionType,
[] parameterNames,
[] 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( expression,
expressionType,
[] parameterNames,
[] parameterTypes,
[] thrownExceptions,
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( expression,
expressionType,
[] parameterNames,
[] parameterTypes,
[] thrownExceptions,
optionalExtendedType,
[] implementedTypes,
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(Scanner scanner,
className,
optionalExtendedType,
[] implementedTypes,
boolean staticMethod,
expressionType,
methodName,
[] parameterNames,
[] parameterTypes,
[] thrownExceptions,
optionalParentClassLoader)
throws CompileException,
ExpressionEvaluator ee = new ExpressionEvaluator(); ee.setClassName(className); ee.setExtendedType(optionalExtendedType); ee.setImplementedTypes(implementedTypes); ee.setStaticMethod(staticMethod); ee.setExpressionType(expressionType); ee.setMethodName(methodName); ee.setParameters(parameterNames, parameterTypes); ee.setThrownExceptions(thrownExceptions); ee.setParentClassLoader(optionalParentClassLoader); ee.cook(scanner);
CompileException
IExpressionEvaluator,
IClassBodyEvaluator.setClassName(String),
IClassBodyEvaluator.setExtendedClass(Class),
IClassBodyEvaluator.setImplementedInterfaces(Class[]),
IScriptEvaluator.setStaticMethod(boolean),
IExpressionEvaluator.setExpressionType(Class),
IScriptEvaluator.setMethodName(String),
IScriptEvaluator.setParameters(String[], Class[]),
IScriptEvaluator.setThrownExceptions(Class[]),
ICookable.setParentClassLoader(ClassLoader),
ICookable.cook(Reader)public ExpressionEvaluator()
| Method Detail |
|---|
public void setExpressionType( expressionType)
IExpressionEvaluatorIExpressionEvaluator.ANY_TYPE allows the expression
to return any type (primitive or reference).
If expressionType is , then the expression must be an
invocation of a void method.
Defaults to IExpressionEvaluator.ANY_TYPE.
setExpressionType in interface IExpressionEvaluatorpublic void setExpressionTypes([] expressionTypes)
IExpressionEvaluatorIExpressionEvaluator.setExpressionType(Class), but for multiple expressions.
setExpressionTypes in interface IExpressionEvaluatorpublic final void setReturnType( returnType)
setExpressionType(Class) should be called instead.
ScriptEvaluator
setReturnType in interface IExpressionEvaluatorsetReturnType in interface IScriptEvaluatorsetReturnType in class ScriptEvaluatorreturnType - The method's return type; null means the "default return type", which is the type
returned by ScriptEvaluator.getDefaultReturnType() (void.class for ScriptEvaluator
and Object.class for ExpressionEvaluator)ScriptEvaluator.getDefaultReturnType(),
getDefaultReturnType()public final void setReturnTypes([] returnTypes)
setExpressionTypes(Class[]) should be called instead.
ScriptEvaluator
setReturnTypes in interface IExpressionEvaluatorsetReturnTypes in interface IScriptEvaluatorsetReturnTypes in class ScriptEvaluatorreturnTypes - The methods' return types; null elements mean the "default return type", which is the
type returned by ScriptEvaluator.getDefaultReturnType() (void.class for ScriptEvaluator and Object.class for ExpressionEvaluator)ScriptEvaluator.getDefaultReturnType(),
getDefaultReturnType()protected getDefaultReturnType()
getDefaultReturnType in class ScriptEvaluatorvoid.classScriptEvaluator.setReturnTypes(Class[])protected <Java.BlockStatement> makeStatements(int idx,
Parser parser)
throws CompileException,
ScriptEvaluatorblock by parsing statements until EOF and adding them to the block.
makeStatements in class ScriptEvaluatorCompileException
public static createFastExpressionEvaluator( expression,
interfaceToImplement,
[] parameterNames,
optionalParentClassLoader)
throws CompileException
ScriptEvaluator.createFastEvaluator(String, Class, String[]) instead:
IExpressionEvaluatoree =CompilerFactoryFactory.getDefaultCompilerFactory().newExpressionEvaluator(); ee.setParentClassLoader(optionalParentClassLoader); return ee.createFastEvaluator(expression, interfaceToImplement, parameterNames);
CompileException
public static createFastExpressionEvaluator(Scanner scanner,
className,
optionalExtendedType,
interfaceToImplement,
[] parameterNames,
optionalParentClassLoader)
throws CompileException,
ScriptEvaluator.createFastEvaluator(Reader, Class, String[]) instead
IExpressionEvaluator, and is hence only available in this
implementation of org.codehaus.commons.compiler. To be independent from this particular
implementation, try to switch to ScriptEvaluator.createFastEvaluator(Reader, Class, String[]).
CompileException
public static createFastExpressionEvaluator(Scanner scanner,
[] optionalDefaultImports,
className,
optionalExtendedType,
interfaceToImplement,
[] parameterNames,
optionalParentClassLoader)
throws CompileException,
ScriptEvaluator.createFastEvaluator(Reader, Class, String[]) instead
IExpressionEvaluator, and is hence only available in this
implementation of org.codehaus.commons.compiler. To be independent from this particular
implementation, try to switch to ScriptEvaluator.createFastEvaluator(Reader, Class, String[]).
CompileException
public static [] guessParameterNames(Scanner scanner)
throws CompileException,
CompileException
Scanner.Scanner(String, Reader)
|
janino.net | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||