|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.commons.jexl3.parser.ParserVisitor
org.apache.commons.jexl3.internal.InterpreterBase
org.apache.commons.jexl3.internal.Interpreter
public class Interpreter
An interpreter of JEXL syntax.
Field Summary | |
---|---|
protected boolean |
cache
Cache executors. |
protected Scope.Frame |
frame
Symbol values. |
protected Map<String,Object> |
functions
The map of 'prefix:function' to object resolving as namespaces. |
protected Map<String,Object> |
functors
The map of dynamically creates namespaces, NamespaceFunctor or duck-types of those. |
protected JexlContext.NamespaceResolver |
ns
The context to store/retrieve variables. |
protected Operators |
operators
The operators evaluation delegate. |
Fields inherited from class org.apache.commons.jexl3.internal.InterpreterBase |
---|
arithmetic, AUTOCLOSEABLE, cancelled, context, EMPTY_PARAMS, jexl, logger, uberspect |
Constructor Summary | |
---|---|
protected |
Interpreter(Engine engine,
JexlContext aContext,
Scope.Frame eFrame)
Creates an interpreter. |
protected |
Interpreter(Interpreter ii,
JexlArithmetic jexla)
Copy constructor. |
Method Summary | |
---|---|
protected Object |
call(JexlNode node,
Object target,
Object functor,
ASTArguments argNode)
Calls a method (or function). |
protected Object |
executeAssign(JexlNode node,
JexlOperator assignop,
Object data)
Executes an assignment with an optional side-effect operator. |
Object |
getAttribute(Object object,
Object attribute)
Gets an attribute of an object. |
protected Object |
getAttribute(Object object,
Object attribute,
JexlNode node)
Gets an attribute of an object. |
Object |
interpret(JexlNode node)
Interpret the given script/expression. |
protected boolean |
isLocalVariable(ASTReference node,
int which)
Checks whether a reference child node holds a local variable reference. |
protected boolean |
isTernaryProtected(JexlNode node)
Check if a null evaluated expression is protected by a ternary expression. |
protected Object |
processAnnotation(ASTAnnotatedStatement stmt,
int index,
Object data)
Processes an annotated statement. |
protected Object |
processAnnotation(String annotation,
Object[] args,
Callable<Object> stmt)
Delegates the annotation processing to the JexlContext if it is an AnnotationProcessor. |
protected Object |
resolveNamespace(String prefix,
JexlNode node)
Resolves a namespace, eventually allocating an instance using context as constructor argument. |
void |
setAttribute(Object object,
Object attribute,
Object value)
Sets an attribute of an object. |
protected void |
setAttribute(Object object,
Object attribute,
Object value,
JexlNode node)
Sets an attribute of an object. |
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 |
visit(ASTBlock node,
Object data)
|
protected Object |
visit(ASTBreak node,
Object data)
|
protected Object |
visit(ASTConstructorNode node,
Object data)
|
protected Object |
visit(ASTContinue node,
Object data)
|
protected Object |
visit(ASTDivNode node,
Object data)
|
protected Object |
visit(ASTEmptyFunction node,
Object data)
|
protected Object |
visit(ASTEmptyMethod node,
Object data)
|
protected Object |
visit(ASTEQNode node,
Object data)
|
protected Object |
visit(ASTERNode node,
Object data)
|
protected Object |
visit(ASTEWNode node,
Object data)
|
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 |
visit(ASTGENode node,
Object data)
|
protected Object |
visit(ASTGTNode node,
Object data)
|
protected Object |
visit(ASTIdentifierAccess node,
Object data)
|
protected Object |
visit(ASTIdentifier node,
Object data)
|
protected Object |
visit(ASTIfStatement node,
Object data)
|
protected Object |
visit(ASTJexlScript node,
Object data)
|
protected Object |
visit(ASTJxltLiteral node,
Object data)
|
protected Object |
visit(ASTLENode node,
Object data)
|
protected Object |
visit(ASTLTNode node,
Object data)
|
protected Object |
visit(ASTMapEntry node,
Object data)
|
protected Object |
visit(ASTMapLiteral node,
Object data)
|
protected Object |
visit(ASTMethodNode node,
Object data)
|
protected Object |
visit(ASTModNode node,
Object data)
|
protected Object |
visit(ASTMulNode node,
Object data)
|
protected Object |
visit(ASTNENode node,
Object data)
|
protected Object |
visit(ASTNEWNode node,
Object data)
|
protected Object |
visit(ASTNotNode node,
Object data)
|
protected Object |
visit(ASTNRNode node,
Object data)
|
protected Object |
visit(ASTNSWNode node,
Object data)
|
protected Object |
visit(ASTNullLiteral node,
Object data)
|
protected Object |
visit(ASTNumberLiteral node,
Object data)
|
protected Object |
visit(ASTOrNode 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(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(ASTSetSubNode node,
Object data)
|
protected Object |
visit(ASTSetXorNode node,
Object data)
|
protected Object |
visit(ASTSizeFunction node,
Object data)
|
protected Object |
visit(ASTSizeMethod node,
Object data)
|
protected Object |
visit(ASTStringLiteral node,
Object data)
|
protected Object |
visit(ASTSubNode node,
Object data)
|
protected Object |
visit(ASTSWNode node,
Object data)
|
protected Object |
visit(ASTTernaryNode node,
Object data)
|
protected Object |
visit(ASTTrueNode node,
Object data)
|
protected Object |
visit(ASTUnaryMinusNode node,
Object data)
|
protected Object |
visit(ASTVar node,
Object data)
|
protected Object |
visit(ASTWhileStatement node,
Object data)
|
Methods inherited from class org.apache.commons.jexl3.internal.InterpreterBase |
---|
annotationError, cancel, closeIfSupported, findNullOperand, invocationException, isCancellable, isCancelled, isSilent, isStrictEngine, operatorError, unsolvableMethod, unsolvableProperty, unsolvableVariable |
Methods inherited from class org.apache.commons.jexl3.parser.ParserVisitor |
---|
visit, visit |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final Operators operators
protected final boolean cache
protected final Scope.Frame frame
protected final JexlContext.NamespaceResolver ns
protected final Map<String,Object> functions
protected Map<String,Object> functors
Constructor Detail |
---|
protected Interpreter(Engine engine, JexlContext aContext, Scope.Frame eFrame)
engine
- the engine creating this interpreteraContext
- the context to evaluate expressioneFrame
- the interpreter evaluation frameprotected Interpreter(Interpreter ii, JexlArithmetic jexla)
ii
- the interpreter to copyjexla
- the arithmetic instance to use (or null)Method Detail |
---|
public Object interpret(JexlNode node)
If the underlying JEXL engine is silent, errors will be logged through its logger as warning.
node
- the script or expression to interpret.
JexlException
- if any error occurs during interpretation.protected Object resolveNamespace(String prefix, JexlNode node)
The lifetime of such instances span the current expression or script evaluation.
prefix
- the prefix name (may be null for global namespace)node
- the AST node
protected Object visit(ASTAddNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSubNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTMulNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTDivNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTModNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTBitwiseAndNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTBitwiseOrNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTBitwiseXorNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTEQNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTNENode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTGENode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTGTNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTLENode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTLTNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSWNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTNSWNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTEWNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTNEWNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTERNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTNRNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTRangeNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTUnaryMinusNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTBitwiseComplNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTNotNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTIfStatement node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTBlock node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTReturnStatement node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTContinue node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTBreak node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTForeachStatement node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTWhileStatement node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTAndNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTOrNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTNullLiteral node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTTrueNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTFalseNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTNumberLiteral node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTStringLiteral node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTArrayLiteral node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTExtendedLiteral node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSetLiteral node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTMapLiteral node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTMapEntry node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTTernaryNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSizeFunction node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSizeMethod node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTEmptyFunction node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTEmptyMethod node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTJexlScript node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTVar node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTReferenceExpression node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTIdentifier node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTArrayAccess node, Object data)
visit
in class ParserVisitor
protected boolean isTernaryProtected(JexlNode node)
The rationale is that the ternary / elvis expressions are meant for the user to explictly take control over the error generation; ie, ternaries can return null even if the engine in isStrict mode would normally throw an exception.
node
- the expression node
protected boolean isLocalVariable(ASTReference node, int which)
node
- the reference nodewhich
- the child we are checking
protected Object visit(ASTIdentifierAccess node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTReference node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTAssignment node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSetAddNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSetSubNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSetMultNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSetDivNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSetModNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSetAndNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSetOrNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTSetXorNode node, Object data)
visit
in class ParserVisitor
protected Object executeAssign(JexlNode node, JexlOperator assignop, Object data)
node
- the nodeassignop
- the assignment operator or null if simply assignmentdata
- the data
protected Object[] visit(ASTArguments node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTMethodNode node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTFunctionNode node, Object data)
visit
in class ParserVisitor
protected Object call(JexlNode node, Object target, Object functor, ASTArguments argNode)
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
node
- the method nodetarget
- the target of the method, what it should be invoked uponfunctor
- the object carrying the method or function or the method identifierargNode
- the node carrying the arguments
protected Object visit(ASTConstructorNode node, Object data)
visit
in class ParserVisitor
public Object getAttribute(Object object, Object attribute)
object
- to retrieve value fromattribute
- the attribute of the object, e.g. an index (1, 0, 2) or key for a map
protected Object getAttribute(Object object, Object attribute, JexlNode node)
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
public void setAttribute(Object object, Object attribute, Object value)
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 attributeprotected void setAttribute(Object object, Object attribute, Object value, JexlNode node)
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 objectprotected Object visit(ASTJxltLiteral node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTAnnotation node, Object data)
visit
in class ParserVisitor
protected Object visit(ASTAnnotatedStatement node, Object data)
visit
in class ParserVisitor
protected Object processAnnotation(ASTAnnotatedStatement stmt, int index, Object data)
stmt
- the statementindex
- the index of the current annotation being processeddata
- the contextual data
protected Object processAnnotation(String annotation, Object[] args, Callable<Object> stmt) throws Exception
annotation
- the annotation nameargs
- the annotation argumentsstmt
- the statement / block that was annotated
Exception
- if anything goes wrong
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |