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
evalCatch
(ASTReference catchVar, JexlNode catchBody, JexlException caught, Object data) Evaluate the catch in a try/catch/finally.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) Interpret the given script/expression.private boolean
isInstance
(Object object, Object clazz) Determines if the specified Object is assignment-compatible with the object represented by the Class.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.private String
resolveClassName
(String name) Resolves a class name.protected Object
runClosure
(Closure closure) Runs a closure.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
visit
(ASTEQSNode node, Object data) 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
(ASTInstanceOf 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
(ASTNESNode node, Object data) protected Object
visit
(ASTNEWNode node, Object data) protected Object
visit
(ASTNotInstanceOf 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
(ASTThrowStatement node, Object data) protected Object
visit
(ASTTrueNode node, Object data) protected Object
visit
(ASTTryResources node, Object data) protected Object
visit
(ASTTryStatement 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, closeIfSupported, constVariable, 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
-
INTER
The thread local interpreter. -
fp
protected int fpFrame height. -
frame
Symbol values. -
block
Block micro-frames.
-
-
Constructor Details
-
Interpreter
Creates an interpreter.- Parameters:
engine
- the engine creating this interpreteropts
- the evaluation options, flags modifying evaluation behavioraContext
- the evaluation context, global variables, methods and functionseFrame
- 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
-
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
-
evalCatch
private Object evalCatch(ASTReference catchVar, JexlNode catchBody, JexlException caught, Object data) Evaluate the catch in a try/catch/finally.- Parameters:
catchVar
- the variable containing the exceptioncatchBody
- the bodycaught
- the caught exceptiondata
- the data- Returns:
- the result of body evaluation
-
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
-
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
-
forIterator
-
forLoop
-
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.
-
isInstance
Determines if the specified Object is assignment-compatible with the object represented by the Class.- Parameters:
object
- the Objectclazz
- the Class- Returns:
- the result of isInstance call
-
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
-
putThreadInterpreter
Swaps the current thread local interpreter.- Parameters:
inter
- the interpreter or null- Returns:
- the previous thread local interpreter
-
resolveClassName
Resolves a class name.- Parameters:
name
- the simple class name- Returns:
- the fully qualified class name or the name
-
runClosure
Runs a closure.- Parameters:
closure
- the closure- Returns:
- the closure return value
-
testPredicate
-
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
-
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
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
-
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
-
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
-
visitBlock
Base visitation for blocks.- Parameters:
node
- the blockdata
- the usual data- Returns:
- the result of the last expression evaluation
-
visitLexicalNode
Runs a node.- Parameters:
node
- the nodedata
- the usual data- Returns:
- the return value
-