Package org.apache.commons.jexl2
Class Interpreter
- java.lang.Object
-
- org.apache.commons.jexl2.Interpreter
-
- All Implemented Interfaces:
ParserVisitor
public class Interpreter extends java.lang.Object implements ParserVisitor
An interpreter of JEXL syntax.- Since:
- 2.0
-
-
Field Summary
Fields Modifier and Type Field Description protected JexlArithmeticarithmeticThe arithmetic handler.protected booleancacheCache executors.protected JexlContextcontextThe context to store/retrieve variables.protected static java.lang.Object[]EMPTY_PARAMSEmpty parameters for method matching.protected java.util.Map<java.lang.String,java.lang.Object>functionsThe map of registered functions.protected java.util.Map<java.lang.String,java.lang.Object>functorsThe map of registered functions.protected org.apache.commons.logging.LogloggerThe logger.protected java.lang.Object[]registersRegisters or arguments.protected booleansilentSilent intepreter flag.protected booleanstrictStrict interpreter flag.protected UberspectuberspectThe uberspect.
-
Constructor Summary
Constructors Modifier Constructor Description protectedInterpreter(Interpreter base)Copy constructor.Interpreter(JexlEngine jexl, JexlContext aContext)Deprecated.Interpreter(JexlEngine jexl, JexlContext aContext, boolean strictFlag, boolean silentFlag)Creates an interpreter.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected JexlNodefindNullOperand(java.lang.RuntimeException xrt, JexlNode node, java.lang.Object left, java.lang.Object right)Finds the node causing a NPE for diadic operators.java.lang.ObjectgetAttribute(java.lang.Object object, java.lang.Object attribute)Gets an attribute of an object.protected java.lang.ObjectgetAttribute(java.lang.Object object, java.lang.Object attribute, JexlNode node)Gets an attribute of an object.protected JexlContextgetContext()Gets the context.protected UberspectgetUberspect()Gets the uberspect.java.lang.Objectinterpret(JexlNode node)Interpret the given script/expression.protected java.lang.ObjectinvocationFailed(JexlException xjexl)Triggered when method, function or constructor invocation fails.protected booleanisCancelled()Checks whether this interpreter execution was cancelled due to thread interruption.booleanisSilent()Checks whether this interpreter throws JexlException when encountering errors.booleanisStrict()Checks whether this interpreter considers unknown variables, methods and constructors as errors.protected java.lang.ObjectresolveNamespace(java.lang.String prefix, JexlNode node)Resolves a namespace, eventually allocating an instance using context as constructor argument.voidsetAttribute(java.lang.Object object, java.lang.Object attribute, java.lang.Object value)Sets an attribute of an object.protected voidsetAttribute(java.lang.Object object, java.lang.Object attribute, java.lang.Object value, JexlNode node)Sets an attribute of an object.protected voidsetFrame(JexlEngine.Frame frame)Sets this interpreter parameters and arguments.protected voidsetRegisters(java.lang.Object... theRegisters)Deprecated.voidsetSilent(boolean flag)Deprecated.Do not use; will be removed in a later versionvoidsetStrict(boolean flag)Deprecated.Do not use; will be removed in a later versionprotected java.lang.ObjectunknownVariable(JexlException xjexl)Triggered when variable can not be resolved.java.lang.Objectvisit(ASTAdditiveNode node, java.lang.Object data)java.lang.Objectvisit(ASTAdditiveOperator node, java.lang.Object data)java.lang.Objectvisit(ASTAmbiguous node, java.lang.Object data)Unused, should throw in Parser.java.lang.Objectvisit(ASTAndNode node, java.lang.Object data)java.lang.Objectvisit(ASTArrayAccess node, java.lang.Object data)java.lang.Objectvisit(ASTArrayLiteral node, java.lang.Object data)java.lang.Objectvisit(ASTAssignment node, java.lang.Object data)java.lang.Objectvisit(ASTBitwiseAndNode node, java.lang.Object data)java.lang.Objectvisit(ASTBitwiseComplNode node, java.lang.Object data)java.lang.Objectvisit(ASTBitwiseOrNode node, java.lang.Object data)java.lang.Objectvisit(ASTBitwiseXorNode node, java.lang.Object data)java.lang.Objectvisit(ASTBlock node, java.lang.Object data)java.lang.Objectvisit(ASTConstructorNode node, java.lang.Object data)java.lang.Objectvisit(ASTDivNode node, java.lang.Object data)java.lang.Objectvisit(ASTEmptyFunction node, java.lang.Object data)java.lang.Objectvisit(ASTEQNode node, java.lang.Object data)java.lang.Objectvisit(ASTERNode node, java.lang.Object data)java.lang.Objectvisit(ASTFalseNode node, java.lang.Object data)java.lang.Objectvisit(ASTFloatLiteral node, java.lang.Object data)Deprecated.Do not usejava.lang.Objectvisit(ASTForeachStatement node, java.lang.Object data)java.lang.Objectvisit(ASTFunctionNode node, java.lang.Object data)java.lang.Objectvisit(ASTGENode node, java.lang.Object data)java.lang.Objectvisit(ASTGTNode node, java.lang.Object data)java.lang.Objectvisit(ASTIdentifier node, java.lang.Object data)java.lang.Objectvisit(ASTIfStatement node, java.lang.Object data)java.lang.Objectvisit(ASTIntegerLiteral node, java.lang.Object data)Deprecated.Do not usejava.lang.Objectvisit(ASTJexlScript node, java.lang.Object data)java.lang.Objectvisit(ASTLENode node, java.lang.Object data)java.lang.Objectvisit(ASTLTNode node, java.lang.Object data)java.lang.Objectvisit(ASTMapEntry node, java.lang.Object data)java.lang.Objectvisit(ASTMapLiteral node, java.lang.Object data)java.lang.Objectvisit(ASTMethodNode node, java.lang.Object data)java.lang.Objectvisit(ASTModNode node, java.lang.Object data)java.lang.Objectvisit(ASTMulNode node, java.lang.Object data)java.lang.Objectvisit(ASTNENode node, java.lang.Object data)java.lang.Objectvisit(ASTNotNode node, java.lang.Object data)java.lang.Objectvisit(ASTNRNode node, java.lang.Object data)java.lang.Objectvisit(ASTNullLiteral node, java.lang.Object data)java.lang.Objectvisit(ASTNumberLiteral node, java.lang.Object data)java.lang.Objectvisit(ASTOrNode node, java.lang.Object data)java.lang.Objectvisit(ASTReferenceExpression node, java.lang.Object data)java.lang.Objectvisit(ASTReference node, java.lang.Object data)java.lang.Objectvisit(ASTReturnStatement node, java.lang.Object data)java.lang.Objectvisit(ASTSizeFunction node, java.lang.Object data)java.lang.Objectvisit(ASTSizeMethod node, java.lang.Object data)java.lang.Objectvisit(ASTStringLiteral node, java.lang.Object data)java.lang.Objectvisit(ASTTernaryNode node, java.lang.Object data)java.lang.Objectvisit(ASTTrueNode node, java.lang.Object data)java.lang.Objectvisit(ASTUnaryMinusNode node, java.lang.Object data)java.lang.Objectvisit(ASTVar node, java.lang.Object data)java.lang.Objectvisit(ASTWhileStatement node, java.lang.Object data)java.lang.Objectvisit(SimpleNode node, java.lang.Object data)Unused, satisfy ParserVisitor interface.
-
-
-
Field Detail
-
logger
protected final org.apache.commons.logging.Log logger
The logger.
-
arithmetic
protected final JexlArithmetic arithmetic
The arithmetic handler.
-
functions
protected final java.util.Map<java.lang.String,java.lang.Object> functions
The map of registered functions.
-
functors
protected java.util.Map<java.lang.String,java.lang.Object> functors
The map of registered functions.
-
context
protected final JexlContext context
The context to store/retrieve variables.
-
strict
protected boolean strict
Strict interpreter flag. Do not modify; will be made final/private in a later version.
-
silent
protected boolean silent
Silent intepreter flag. Do not modify; will be made final/private in a later version.
-
cache
protected final boolean cache
Cache executors.
-
registers
protected java.lang.Object[] registers
Registers or arguments.
-
EMPTY_PARAMS
protected static final java.lang.Object[] EMPTY_PARAMS
Empty parameters for method matching.
-
-
Constructor Detail
-
Interpreter
@Deprecated public Interpreter(JexlEngine jexl, JexlContext aContext)
Deprecated.Creates an interpreter.- Parameters:
jexl- the engine creating this interpreteraContext- the context to evaluate expression
-
Interpreter
public Interpreter(JexlEngine jexl, JexlContext aContext, boolean strictFlag, boolean silentFlag)
Creates an interpreter.- Parameters:
jexl- the engine creating this interpreteraContext- the context to evaluate expressionstrictFlag- whether this interpreter runs in strict modesilentFlag- whether this interpreter runs in silent mode- Since:
- 2.1
-
Interpreter
protected Interpreter(Interpreter base)
Copy constructor.- Parameters:
base- the base to copy- Since:
- 2.1
-
-
Method Detail
-
setStrict
@Deprecated public void setStrict(boolean flag)
Deprecated.Do not use; will be removed in a later versionSets whether this interpreter considers unknown variables, methods and constructors as errors.- Parameters:
flag- true for strict, false for lenient- Since:
- 2.1
-
setSilent
@Deprecated public void setSilent(boolean flag)
Deprecated.Do not use; will be removed in a later versionSets whether this interpreter throws JexlException when encountering errors.- Parameters:
flag- true for silent, false for verbose
-
isStrict
public boolean isStrict()
Checks whether this interpreter considers unknown variables, methods and constructors as errors.- Returns:
- true if strict, false otherwise
- Since:
- 2.1
-
isSilent
public boolean isSilent()
Checks whether this interpreter throws JexlException when encountering errors.- Returns:
- true if silent, false otherwise
-
interpret
public java.lang.Object interpret(JexlNode node)
Interpret the given script/expression.If the underlying JEXL engine is silent, errors will be logged through its logger as info.
- Parameters:
node- the script or expression to interpret.- Returns:
- the result of the interpretation.
- Throws:
JexlException- if any error occurs during interpretation.
-
getContext
protected JexlContext getContext()
Gets the context.- Returns:
- the
JexlContextused for evaluation. - Since:
- 2.1
-
getUberspect
protected Uberspect getUberspect()
Gets the uberspect.- Returns:
- an
Uberspect
-
setRegisters
@Deprecated protected void setRegisters(java.lang.Object... theRegisters)
Deprecated.Sets this interpreter registers for bean access/assign expressions.Use setFrame(...) instead.
- Parameters:
theRegisters- the array of registers
-
setFrame
protected void setFrame(JexlEngine.Frame frame)
Sets this interpreter parameters and arguments.- Parameters:
frame- the calling frame- Since:
- 2.1
-
findNullOperand
protected JexlNode findNullOperand(java.lang.RuntimeException xrt, JexlNode node, java.lang.Object left, java.lang.Object right)
Finds the node causing a NPE for diadic operators.- Parameters:
xrt- the RuntimeExceptionnode- the parent nodeleft- the left argumentright- the right argument- Returns:
- the left, right or parent node
-
unknownVariable
protected java.lang.Object unknownVariable(JexlException xjexl)
Triggered when variable can not be resolved.- Parameters:
xjexl- the JexlException ("undefined variable " + variable)- Returns:
- throws JexlException if strict, null otherwise
-
invocationFailed
protected java.lang.Object invocationFailed(JexlException xjexl)
Triggered when method, function or constructor invocation fails.- Parameters:
xjexl- the JexlException wrapping the original error- Returns:
- throws JexlException if strict, null otherwise
-
isCancelled
protected boolean isCancelled()
Checks whether this interpreter execution was cancelled due to thread interruption.- Returns:
- true if cancelled, false otherwise
- Since:
- 2.1
-
resolveNamespace
protected java.lang.Object resolveNamespace(java.lang.String prefix, JexlNode node)
Resolves a namespace, eventually allocating an instance using context as constructor argument. The lifetime of such instances span the current expression or script evaluation.- Parameters:
prefix- the prefix name (may be null for global namespace)node- the AST node- Returns:
- the namespace instance
-
visit
public java.lang.Object visit(ASTAdditiveNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTAdditiveOperator node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTAndNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTArrayAccess node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTArrayLiteral node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTAssignment node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBitwiseAndNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBitwiseComplNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBitwiseOrNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBitwiseXorNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBlock node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTDivNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTEmptyFunction node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTEQNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTFalseNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTForeachStatement node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTGENode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTGTNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTERNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTIdentifier node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
@Deprecated public java.lang.Object visit(ASTFloatLiteral node, java.lang.Object data)
Deprecated.Do not use
-
visit
@Deprecated public java.lang.Object visit(ASTIntegerLiteral node, java.lang.Object data)
Deprecated.Do not use
-
visit
public java.lang.Object visit(ASTVar node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTIfStatement node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNumberLiteral node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTJexlScript node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTLENode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTLTNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTMapEntry node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTMapLiteral node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTMethodNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTFunctionNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTConstructorNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTModNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTMulNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNENode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNRNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNotNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNullLiteral node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTOrNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTReference node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTReferenceExpression node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor- Since:
- 2.1
-
visit
public java.lang.Object visit(ASTReturnStatement node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor- Since:
- 2.1
-
visit
public java.lang.Object visit(ASTSizeFunction node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTSizeMethod node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTStringLiteral node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTTernaryNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTTrueNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTUnaryMinusNode node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTWhileStatement node, java.lang.Object data)
- Specified by:
visitin interfaceParserVisitor
-
getAttribute
public java.lang.Object getAttribute(java.lang.Object object, java.lang.Object attribute)
Gets an attribute of an object.- Parameters:
object- to retrieve value fromattribute- the attribute of the object, e.g. an index (1, 0, 2) or key for a map- Returns:
- the attribute value
-
getAttribute
protected java.lang.Object getAttribute(java.lang.Object object, java.lang.Object attribute, JexlNode node)
Gets an attribute of an object.- Parameters:
object- to retrieve value fromattribute- the attribute of the object, e.g. an index (1, 0, 2) or key for a mapnode- the node that evaluated as the object- Returns:
- the attribute value
-
setAttribute
public void setAttribute(java.lang.Object object, java.lang.Object attribute, java.lang.Object value)
Sets an attribute of an object.- Parameters:
object- to set the value toattribute- the attribute of the object, e.g. an index (1, 0, 2) or key for a mapvalue- the value to assign to the object's attribute
-
setAttribute
protected void setAttribute(java.lang.Object object, java.lang.Object attribute, java.lang.Object value, JexlNode node)
Sets an attribute of an object.- Parameters:
object- to set the value toattribute- the attribute of the object, e.g. an index (1, 0, 2) or key for a mapvalue- the value to assign to the object's attributenode- the node that evaluated as the object
-
visit
public java.lang.Object visit(SimpleNode node, java.lang.Object data)
Unused, satisfy ParserVisitor interface.- Specified by:
visitin interfaceParserVisitor- Parameters:
node- a nodedata- the data- Returns:
- does not return
-
visit
public java.lang.Object visit(ASTAmbiguous node, java.lang.Object data)
Unused, should throw in Parser.- Specified by:
visitin interfaceParserVisitor- Parameters:
node- a nodedata- the data- Returns:
- does not return
-
-