Class Interpreter
java.lang.Object
org.apache.commons.jexl3.parser.ParserVisitor
org.apache.commons.jexl3.internal.InterpreterBase
org.apache.commons.jexl3.internal.Interpreter
- Direct Known Subclasses:
TemplateInterpreter
An interpreter of JEXL syntax.
- Since:
- 2.0
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class org.apache.commons.jexl3.internal.InterpreterBase
InterpreterBase.ArithmeticFuncall, InterpreterBase.CallDispatcher, InterpreterBase.ContextFuncall, InterpreterBase.ContextualCtor, InterpreterBase.Funcall
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected LexicalFrame
Block micro-frames.protected int
Frame height.protected final Frame
Symbol values.protected static final ThreadLocal<Interpreter>
The thread local interpreter.Fields inherited from class org.apache.commons.jexl3.internal.InterpreterBase
arithmetic, cache, cancelled, context, EMPTY_PARAMS, fqcnSolver, functions, functors, jexl, logger, ns, operators, options, uberspect
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
Interpreter
(Engine engine, JexlOptions opts, JexlContext aContext, Frame eFrame) Creates an interpreter.protected
Interpreter
(Interpreter ii, JexlArithmetic jexla) Copy constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected Object
call
(JexlNode node, Object target, Object funcNode, ASTArguments argNode) Calls a method (or function).private Object
Evaluates an access identifier based on the 2 main implementations; static (name or numbered identifier) or dynamic (jxlt).protected Object
executeAssign
(JexlNode node, JexlOperator assignop, Object data) Executes an assignment with an optional side effect operator.private Object
forIterator
(ASTForeachStatement node, Object data) private Object
forLoop
(ASTForeachStatement node, Object data) getAttribute
(Object object, Object attribute) Gets an attribute of an object.Interpret the given script/expression.protected Object
processAnnotation
(String annotation, Object[] args, Callable<Object> stmt) Delegates the annotation processing to the JexlContext if it is an AnnotationProcessor.protected Object
processAnnotation
(ASTAnnotatedStatement stmt, int index, Object data) Processes an annotated statement.protected Interpreter
putThreadInterpreter
(Interpreter inter) Swaps the current thread local interpreter.protected Object
runClosure
(Closure closure, Object data) Runs a closure.void
setAttribute
(Object object, Object attribute, Object value) Sets an attribute of an object.private boolean
testPredicate
(JexlNode node, Object condition) protected Object
visit
(ASTAddNode node, Object data) protected Object
visit
(ASTAndNode node, Object data) protected Object
visit
(ASTAnnotatedStatement node, Object data) protected Object
visit
(ASTAnnotation node, Object data) protected Object[]
visit
(ASTArguments node, Object data) protected Object
visit
(ASTArrayAccess node, Object data) protected Object
visit
(ASTArrayLiteral node, Object data) protected Object
visit
(ASTAssignment node, Object data) protected Object
visit
(ASTBitwiseAndNode node, Object data) protected Object
visit
(ASTBitwiseComplNode node, Object data) protected Object
visit
(ASTBitwiseOrNode node, Object data) protected Object
visit
(ASTBitwiseXorNode node, Object data) protected Object
protected Object
protected Object
visit
(ASTConstructorNode node, Object data) protected Object
visit
(ASTContinue node, Object data) protected Object
visit
(ASTDecrementGetNode node, Object data) protected Object
visit
(ASTDefineVars node, Object data) protected Object
visit
(ASTDivNode node, Object data) protected Object
visit
(ASTDoWhileStatement node, Object data) protected Object
visit
(ASTEmptyFunction node, Object data) protected Object
protected Object
protected Object
protected Object
visit
(ASTExtendedLiteral node, Object data) protected Object
visit
(ASTFalseNode node, Object data) protected Object
visit
(ASTForeachStatement node, Object data) protected Object
visit
(ASTFunctionNode node, Object data) protected Object
protected Object
visit
(ASTGetDecrementNode node, Object data) protected Object
visit
(ASTGetIncrementNode node, Object data) protected Object
protected Object
visit
(ASTIdentifierAccess node, Object data) protected Object
visit
(ASTIdentifier identifier, Object data) protected Object
visit
(ASTIfStatement node, Object data) protected Object
visit
(ASTIncrementGetNode node, Object data) protected Object
visit
(ASTJexlScript script, Object data) protected Object
visit
(ASTJxltLiteral node, Object data) protected Object
protected Object
protected Object
visit
(ASTMapEntry node, Object data) protected Object
visit
(ASTMapLiteral node, Object data) protected Object
visit
(ASTMethodNode node, Object data) private Object
visit
(ASTMethodNode node, Object antish, Object data) Execute a method call, ie syntactically written as name.call(...).protected Object
visit
(ASTModNode node, Object data) protected Object
visit
(ASTMulNode node, Object data) protected Object
protected Object
visit
(ASTNEWNode node, Object data) protected Object
visit
(ASTNotNode node, Object data) protected Object
protected Object
visit
(ASTNSWNode node, Object data) protected Object
visit
(ASTNullLiteral node, Object data) protected Object
visit
(ASTNullpNode node, Object data) protected Object
visit
(ASTNumberLiteral node, Object data) protected Object
protected Object
visit
(ASTQualifiedIdentifier node, Object data) protected Object
visit
(ASTRangeNode node, Object data) protected Object
visit
(ASTReferenceExpression node, Object data) protected Object
visit
(ASTReference node, Object data) protected Object
visit
(ASTRegexLiteral node, Object data) protected Object
visit
(ASTReturnStatement node, Object data) protected Object
visit
(ASTSetAddNode node, Object data) protected Object
visit
(ASTSetAndNode node, Object data) protected Object
visit
(ASTSetDivNode node, Object data) protected Object
visit
(ASTSetLiteral node, Object data) protected Object
visit
(ASTSetModNode node, Object data) protected Object
visit
(ASTSetMultNode node, Object data) protected Object
visit
(ASTSetOrNode node, Object data) protected Object
visit
(ASTSetShiftLeftNode node, Object data) protected Object
visit
(ASTSetShiftRightNode node, Object data) protected Object
visit
(ASTSetShiftRightUnsignedNode node, Object data) protected Object
visit
(ASTSetSubNode node, Object data) protected Object
visit
(ASTSetXorNode node, Object data) protected Object
visit
(ASTShiftLeftNode node, Object data) protected Object
visit
(ASTShiftRightNode node, Object data) protected Object
visit
(ASTShiftRightUnsignedNode node, Object data) protected Object
visit
(ASTSizeFunction node, Object data) protected Object
visit
(ASTStringLiteral node, Object data) protected Object
visit
(ASTSubNode node, Object data) protected Object
protected Object
visit
(ASTTernaryNode node, Object data) protected Object
visit
(ASTTrueNode node, Object data) protected Object
visit
(ASTUnaryMinusNode node, Object data) protected Object
visit
(ASTUnaryPlusNode node, Object data) protected Object
protected Object
visit
(ASTWhileStatement node, Object data) private Object
visitBlock
(ASTBlock node, Object data) Base visitation for blocks.protected Object
visitLexicalNode
(JexlNode node, Object data) Runs a node.Methods inherited from class org.apache.commons.jexl3.internal.InterpreterBase
annotationError, callArguments, cancel, cancelCheck, closeIfSupported, defineVariable, findNullOperand, findNullOperand, functionArgument, functionArguments, getAttribute, getVariable, invocationException, isCancellable, isCancelled, isSafe, isSilent, isStrictEngine, isStrictOperand, isTernaryProtected, isVariableDefined, operatorError, redefinedVariable, resolveNamespace, setAttribute, setContextVariable, stringifyProperty, stringifyPropertyValue, undefinedVariable, unsolvableMethod, unsolvableMethod, unsolvableProperty, unsolvableVariable, variableError
Methods inherited from class org.apache.commons.jexl3.parser.ParserVisitor
visit, visit
-
Field Details
-
fp
protected int fpFrame height. -
frame
Symbol values. -
block
Block micro-frames. -
INTER
The thread local interpreter.
-
-
Constructor Details
-
Interpreter
Creates an interpreter.- Parameters:
engine
- the engine creating this interpreteraContext
- the evaluation context, global variables, methods and functionsopts
- the evaluation options, flags modifying evaluation behavioreFrame
- the evaluation frame, arguments and local variables
-
Interpreter
Copy constructor.- Parameters:
ii
- the interpreter to copyjexla
- the arithmetic instance to use (or null)
-
-
Method Details
-
putThreadInterpreter
Swaps the current thread local interpreter.- Parameters:
inter
- the interpreter or null- Returns:
- the previous thread local interpreter
-
interpret
Interpret the given script/expression.If the underlying JEXL engine is silent, errors will be logged through its logger as warning.
- Parameters:
node
- the script or expression to interpret.- Returns:
- the result of the interpretation.
- Throws:
JexlException
- if any error occurs during interpretation.
-
getAttribute
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
-
setAttribute
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
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
testPredicate
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visitBlock
Base visitation for blocks.- Parameters:
node
- the blockdata
- the usual data- Returns:
- the result of the last expression evaluation
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
forIterator
-
forLoop
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visitLexicalNode
Runs a node.- Parameters:
node
- the nodedata
- the usual data- Returns:
- the return value
-
runClosure
Runs a closure.- Parameters:
closure
- the closuredata
- the usual data- Returns:
- the closure return value
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
evalIdentifier
Evaluates an access identifier based on the 2 main implementations; static (name or numbered identifier) or dynamic (jxlt).- Parameters:
node
- the identifier access node- Returns:
- the evaluated identifier
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
executeAssign
Executes an assignment with an optional side effect operator.- Parameters:
node
- the nodeassignop
- the assignment operator or null if simply assignmentdata
- the data- Returns:
- the left hand side
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
Execute a method call, ie syntactically written as name.call(...).- Parameters:
node
- the actual method call nodeantish
- non-null when name.call is an antish variabledata
- the context- Returns:
- the method call result
-
visit
- Specified by:
visit
in classParserVisitor
-
call
Calls a method (or function).Method resolution is a follows: 1 - attempt to find a method in the target passed as parameter; 2 - if this fails, seeks a JexlScript or JexlMethod or a duck-callable* as a property of that target; 3 - if this fails, narrow the arguments and try again 1 4 - if this fails, seeks a context or arithmetic method with the proper name taking the target as first argument;
*duck-callable: an object where a "call" function exists- Parameters:
node
- the method nodetarget
- the target of the method, what it should be invoked uponfuncNode
- the object carrying the method or function or the method identifierargNode
- the node carrying the arguments- Returns:
- the result of the method invocation
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
visit
- Specified by:
visit
in classParserVisitor
-
processAnnotation
Processes an annotated statement.- Parameters:
stmt
- the statementindex
- the index of the current annotation being processeddata
- the contextual data- Returns:
- the result of the statement block evaluation
-
processAnnotation
protected Object processAnnotation(String annotation, Object[] args, Callable<Object> stmt) throws Exception Delegates the annotation processing to the JexlContext if it is an AnnotationProcessor.- Parameters:
annotation
- the annotation nameargs
- the annotation argumentsstmt
- the statement / block that was annotated- Returns:
- the result of statement.call()
- Throws:
Exception
- if anything goes wrong
-