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 JexlArithmetic
arithmetic
The arithmetic handler.protected boolean
cache
Cache executors.protected JexlContext
context
The context to store/retrieve variables.protected static java.lang.Object[]
EMPTY_PARAMS
Empty parameters for method matching.protected java.util.Map<java.lang.String,java.lang.Object>
functions
The map of registered functions.protected java.util.Map<java.lang.String,java.lang.Object>
functors
The map of registered functions.protected org.apache.commons.logging.Log
logger
The logger.protected java.lang.Object[]
registers
Registers or arguments.protected boolean
silent
Silent intepreter flag.protected boolean
strict
Strict interpreter flag.protected Uberspect
uberspect
The uberspect.
-
Constructor Summary
Constructors Modifier Constructor Description protected
Interpreter(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 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.java.lang.Object
getAttribute(java.lang.Object object, java.lang.Object attribute)
Gets an attribute of an object.protected java.lang.Object
getAttribute(java.lang.Object object, java.lang.Object attribute, JexlNode node)
Gets an attribute of an object.protected JexlContext
getContext()
Gets the context.protected Uberspect
getUberspect()
Gets the uberspect.java.lang.Object
interpret(JexlNode node)
Interpret the given script/expression.protected java.lang.Object
invocationFailed(JexlException xjexl)
Triggered when method, function or constructor invocation fails.protected boolean
isCancelled()
Checks whether this interpreter execution was cancelled due to thread interruption.boolean
isSilent()
Checks whether this interpreter throws JexlException when encountering errors.boolean
isStrict()
Checks whether this interpreter considers unknown variables, methods and constructors as errors.protected java.lang.Object
resolveNamespace(java.lang.String prefix, JexlNode node)
Resolves a namespace, eventually allocating an instance using context as constructor argument.void
setAttribute(java.lang.Object object, java.lang.Object attribute, java.lang.Object value)
Sets an attribute of an object.protected void
setAttribute(java.lang.Object object, java.lang.Object attribute, java.lang.Object value, JexlNode node)
Sets an attribute of an object.protected void
setFrame(JexlEngine.Frame frame)
Sets this interpreter parameters and arguments.protected void
setRegisters(java.lang.Object... theRegisters)
Deprecated.void
setSilent(boolean flag)
Deprecated.Do not use; will be removed in a later versionvoid
setStrict(boolean flag)
Deprecated.Do not use; will be removed in a later versionprotected java.lang.Object
unknownVariable(JexlException xjexl)
Triggered when variable can not be resolved.java.lang.Object
visit(ASTAdditiveNode node, java.lang.Object data)
java.lang.Object
visit(ASTAdditiveOperator node, java.lang.Object data)
java.lang.Object
visit(ASTAmbiguous node, java.lang.Object data)
Unused, should throw in Parser.java.lang.Object
visit(ASTAndNode node, java.lang.Object data)
java.lang.Object
visit(ASTArrayAccess node, java.lang.Object data)
java.lang.Object
visit(ASTArrayLiteral node, java.lang.Object data)
java.lang.Object
visit(ASTAssignment node, java.lang.Object data)
java.lang.Object
visit(ASTBitwiseAndNode node, java.lang.Object data)
java.lang.Object
visit(ASTBitwiseComplNode node, java.lang.Object data)
java.lang.Object
visit(ASTBitwiseOrNode node, java.lang.Object data)
java.lang.Object
visit(ASTBitwiseXorNode node, java.lang.Object data)
java.lang.Object
visit(ASTBlock node, java.lang.Object data)
java.lang.Object
visit(ASTConstructorNode node, java.lang.Object data)
java.lang.Object
visit(ASTDivNode node, java.lang.Object data)
java.lang.Object
visit(ASTEmptyFunction node, java.lang.Object data)
java.lang.Object
visit(ASTEQNode node, java.lang.Object data)
java.lang.Object
visit(ASTERNode node, java.lang.Object data)
java.lang.Object
visit(ASTFalseNode node, java.lang.Object data)
java.lang.Object
visit(ASTFloatLiteral node, java.lang.Object data)
Deprecated.Do not usejava.lang.Object
visit(ASTForeachStatement node, java.lang.Object data)
java.lang.Object
visit(ASTFunctionNode node, java.lang.Object data)
java.lang.Object
visit(ASTGENode node, java.lang.Object data)
java.lang.Object
visit(ASTGTNode node, java.lang.Object data)
java.lang.Object
visit(ASTIdentifier node, java.lang.Object data)
java.lang.Object
visit(ASTIfStatement node, java.lang.Object data)
java.lang.Object
visit(ASTIntegerLiteral node, java.lang.Object data)
Deprecated.Do not usejava.lang.Object
visit(ASTJexlScript node, java.lang.Object data)
java.lang.Object
visit(ASTLENode node, java.lang.Object data)
java.lang.Object
visit(ASTLTNode node, java.lang.Object data)
java.lang.Object
visit(ASTMapEntry node, java.lang.Object data)
java.lang.Object
visit(ASTMapLiteral node, java.lang.Object data)
java.lang.Object
visit(ASTMethodNode node, java.lang.Object data)
java.lang.Object
visit(ASTModNode node, java.lang.Object data)
java.lang.Object
visit(ASTMulNode node, java.lang.Object data)
java.lang.Object
visit(ASTNENode node, java.lang.Object data)
java.lang.Object
visit(ASTNotNode node, java.lang.Object data)
java.lang.Object
visit(ASTNRNode node, java.lang.Object data)
java.lang.Object
visit(ASTNullLiteral node, java.lang.Object data)
java.lang.Object
visit(ASTNumberLiteral node, java.lang.Object data)
java.lang.Object
visit(ASTOrNode node, java.lang.Object data)
java.lang.Object
visit(ASTReferenceExpression node, java.lang.Object data)
java.lang.Object
visit(ASTReference node, java.lang.Object data)
java.lang.Object
visit(ASTReturnStatement node, java.lang.Object data)
java.lang.Object
visit(ASTSizeFunction node, java.lang.Object data)
java.lang.Object
visit(ASTSizeMethod node, java.lang.Object data)
java.lang.Object
visit(ASTStringLiteral node, java.lang.Object data)
java.lang.Object
visit(ASTTernaryNode node, java.lang.Object data)
java.lang.Object
visit(ASTTrueNode node, java.lang.Object data)
java.lang.Object
visit(ASTUnaryMinusNode node, java.lang.Object data)
java.lang.Object
visit(ASTVar node, java.lang.Object data)
java.lang.Object
visit(ASTWhileStatement node, java.lang.Object data)
java.lang.Object
visit(SimpleNode node, java.lang.Object data)
Unused, satisfy ParserVisitor interface.
-
-
-
Field Detail
-
logger
protected final org.apache.commons.logging.Log logger
The logger.
-
uberspect
protected final Uberspect uberspect
The uberspect.
-
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
JexlContext
used for evaluation. - Since:
- 2.1
-
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:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTAdditiveOperator node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTAndNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTArrayAccess node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTArrayLiteral node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTAssignment node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBitwiseAndNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBitwiseComplNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBitwiseOrNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBitwiseXorNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTBlock node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTDivNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTEmptyFunction node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTEQNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTFalseNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTForeachStatement node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTGENode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTGTNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTERNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTIdentifier node, java.lang.Object data)
- Specified by:
visit
in 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:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTIfStatement node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNumberLiteral node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTJexlScript node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTLENode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTLTNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTMapEntry node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTMapLiteral node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTMethodNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTFunctionNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTConstructorNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTModNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTMulNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNENode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNRNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNotNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTNullLiteral node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTOrNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTReference node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTReferenceExpression node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
- Since:
- 2.1
-
visit
public java.lang.Object visit(ASTReturnStatement node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
- Since:
- 2.1
-
visit
public java.lang.Object visit(ASTSizeFunction node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTSizeMethod node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTStringLiteral node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTTernaryNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTTrueNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTUnaryMinusNode node, java.lang.Object data)
- Specified by:
visit
in interfaceParserVisitor
-
visit
public java.lang.Object visit(ASTWhileStatement node, java.lang.Object data)
- Specified by:
visit
in 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:
visit
in 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:
visit
in interfaceParserVisitor
- Parameters:
node
- a nodedata
- the data- Returns:
- does not return
-
-