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 LexicalFrameBlock micro-frames.protected intFrame height.protected final FrameSymbol 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
ConstructorsModifierConstructorDescriptionprotectedInterpreter(Engine engine, JexlOptions opts, JexlContext aContext, Frame eFrame) Creates an interpreter.protectedInterpreter(Interpreter ii, JexlArithmetic jexla) Copy constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected Objectcall(JexlNode node, Object target, Object funcNode, ASTArguments argNode) Calls a method (or function).private ObjectevalCatch(ASTReference catchVar, JexlNode catchBody, JexlException caught, Object data) Evaluate the catch in a try/catch/finally.private ObjectEvaluates an access identifier based on the 2 main implementations; static (name or numbered identifier) or dynamic (jxlt).protected ObjectexecuteAssign(JexlNode node, JexlOperator assignop, Object data) Executes an assignment with an optional side effect operator.private ObjectforIterator(ASTForeachStatement node, Object data) private ObjectforLoop(ASTForeachStatement node, Object data) Interpret the given script/expression.private booleanisInstance(Object object, Object clazz) Determines if the specified Object is assignment-compatible with the object represented by the Class.protected ObjectprocessAnnotation(String annotation, Object[] args, Callable<Object> stmt) Delegates the annotation processing to the JexlContext if it is an AnnotationProcessor.protected ObjectprocessAnnotation(ASTAnnotatedStatement stmt, int index, Object data) Processes an annotated statement.protected InterpreterputThreadInterpreter(Interpreter inter) Swaps the current thread local interpreter.private StringresolveClassName(String name) Resolves a class name.protected ObjectrunClosure(Closure closure) Runs a closure.private booleantestPredicate(JexlNode node, Object condition) protected Objectvisit(ASTAddNode node, Object data) protected Objectvisit(ASTAndNode node, Object data) protected Objectvisit(ASTAnnotatedStatement node, Object data) protected Objectvisit(ASTAnnotation node, Object data) protected Object[]visit(ASTArguments node, Object data) protected Objectvisit(ASTArrayAccess node, Object data) protected Objectvisit(ASTArrayLiteral node, Object data) protected Objectvisit(ASTAssignment node, Object data) protected Objectvisit(ASTBitwiseAndNode node, Object data) protected Objectvisit(ASTBitwiseComplNode node, Object data) protected Objectvisit(ASTBitwiseOrNode node, Object data) protected Objectvisit(ASTBitwiseXorNode node, Object data) protected Objectprotected Objectprotected Objectvisit(ASTConstructorNode node, Object data) protected Objectvisit(ASTContinue node, Object data) protected Objectvisit(ASTDecrementGetNode node, Object data) protected Objectvisit(ASTDefineVars node, Object data) protected Objectvisit(ASTDivNode node, Object data) protected Objectvisit(ASTDoWhileStatement node, Object data) protected Objectvisit(ASTEmptyFunction node, Object data) protected Objectprotected Objectvisit(ASTEQSNode node, Object data) protected Objectprotected Objectprotected Objectvisit(ASTExtendedLiteral node, Object data) protected Objectvisit(ASTFalseNode node, Object data) protected Objectvisit(ASTForeachStatement node, Object data) protected Objectvisit(ASTFunctionNode node, Object data) protected Objectprotected Objectvisit(ASTGetDecrementNode node, Object data) protected Objectvisit(ASTGetIncrementNode node, Object data) protected Objectprotected Objectvisit(ASTIdentifierAccess node, Object data) protected Objectvisit(ASTIdentifier identifier, Object data) protected Objectvisit(ASTIfStatement node, Object data) protected Objectvisit(ASTIncrementGetNode node, Object data) protected Objectvisit(ASTInstanceOf node, Object data) protected Objectvisit(ASTJexlScript script, Object data) protected Objectvisit(ASTJxltLiteral node, Object data) protected Objectprotected Objectprotected Objectvisit(ASTMapEntry node, Object data) protected Objectvisit(ASTMapLiteral node, Object data) protected Objectvisit(ASTMethodNode node, Object data) private Objectvisit(ASTMethodNode node, Object antish, Object data) Execute a method call, ie syntactically written as name.call(...).protected Objectvisit(ASTModNode node, Object data) protected Objectvisit(ASTMulNode node, Object data) protected Objectprotected Objectvisit(ASTNESNode node, Object data) protected Objectvisit(ASTNEWNode node, Object data) protected Objectvisit(ASTNotInstanceOf node, Object data) protected Objectvisit(ASTNotNode node, Object data) protected Objectprotected Objectvisit(ASTNSWNode node, Object data) protected Objectvisit(ASTNullLiteral node, Object data) protected Objectvisit(ASTNullpNode node, Object data) protected Objectvisit(ASTNumberLiteral node, Object data) protected Objectprotected Objectvisit(ASTQualifiedIdentifier node, Object data) protected Objectvisit(ASTRangeNode node, Object data) protected Objectvisit(ASTReferenceExpression node, Object data) protected Objectvisit(ASTReference node, Object data) protected Objectvisit(ASTRegexLiteral node, Object data) protected Objectvisit(ASTReturnStatement node, Object data) protected Objectvisit(ASTSetAddNode node, Object data) protected Objectvisit(ASTSetAndNode node, Object data) protected Objectvisit(ASTSetDivNode node, Object data) protected Objectvisit(ASTSetLiteral node, Object data) protected Objectvisit(ASTSetModNode node, Object data) protected Objectvisit(ASTSetMultNode node, Object data) protected Objectvisit(ASTSetOrNode node, Object data) protected Objectvisit(ASTSetShiftLeftNode node, Object data) protected Objectvisit(ASTSetShiftRightNode node, Object data) protected Objectvisit(ASTSetShiftRightUnsignedNode node, Object data) protected Objectvisit(ASTSetSubNode node, Object data) protected Objectvisit(ASTSetXorNode node, Object data) protected Objectvisit(ASTShiftLeftNode node, Object data) protected Objectvisit(ASTShiftRightNode node, Object data) protected Objectvisit(ASTShiftRightUnsignedNode node, Object data) protected Objectvisit(ASTSizeFunction node, Object data) protected Objectvisit(ASTStringLiteral node, Object data) protected Objectvisit(ASTSubNode node, Object data) protected Objectprotected Objectvisit(ASTTernaryNode node, Object data) protected Objectvisit(ASTThrowStatement node, Object data) protected Objectvisit(ASTTrueNode node, Object data) protected Objectvisit(ASTTryResources node, Object data) protected Objectvisit(ASTTryStatement node, Object data) protected Objectvisit(ASTUnaryMinusNode node, Object data) protected Objectvisit(ASTUnaryPlusNode node, Object data) protected Objectprotected Objectvisit(ASTWhileStatement node, Object data) private ObjectvisitBlock(ASTBlock node, Object data) Base visitation for blocks.protected ObjectvisitLexicalNode(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, variableErrorMethods 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:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin 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:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin classParserVisitor
-
visit
- Specified by:
visitin 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
-