org.apache.commons.jexl3.internal
Class Interpreter

java.lang.Object
  extended by org.apache.commons.jexl3.parser.ParserVisitor
      extended by org.apache.commons.jexl3.internal.InterpreterBase
          extended by org.apache.commons.jexl3.internal.Interpreter
Direct Known Subclasses:
TemplateInterpreter

public class Interpreter
extends InterpreterBase

An interpreter of JEXL syntax.

Since:
2.0

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

operators

protected final Operators operators
The operators evaluation delegate.


cache

protected final boolean cache
Cache executors.


frame

protected final Scope.Frame frame
Symbol values.


ns

protected final JexlContext.NamespaceResolver ns
The context to store/retrieve variables.


functions

protected final Map<String,Object> functions
The map of 'prefix:function' to object resolving as namespaces.


functors

protected Map<String,Object> functors
The map of dynamically creates namespaces, NamespaceFunctor or duck-types of those.

Constructor Detail

Interpreter

protected Interpreter(Engine engine,
                      JexlContext aContext,
                      Scope.Frame eFrame)
Creates an interpreter.

Parameters:
engine - the engine creating this interpreter
aContext - the context to evaluate expression
eFrame - the interpreter evaluation frame

Interpreter

protected Interpreter(Interpreter ii,
                      JexlArithmetic jexla)
Copy constructor.

Parameters:
ii - the interpreter to copy
jexla - the arithmetic instance to use (or null)
Method Detail

interpret

public Object interpret(JexlNode node)
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.

resolveNamespace

protected Object resolveNamespace(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

protected Object visit(ASTAddNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSubNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTMulNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTDivNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTModNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTBitwiseAndNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTBitwiseOrNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTBitwiseXorNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTEQNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTNENode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTGENode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTGTNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTLENode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTLTNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSWNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTNSWNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTEWNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTNEWNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTERNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTNRNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTRangeNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTUnaryMinusNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTBitwiseComplNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTNotNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTIfStatement node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTBlock node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTReturnStatement node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTContinue node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTBreak node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTForeachStatement node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTWhileStatement node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTAndNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTOrNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTNullLiteral node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTTrueNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTFalseNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTNumberLiteral node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTStringLiteral node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTArrayLiteral node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTExtendedLiteral node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSetLiteral node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTMapLiteral node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTMapEntry node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTTernaryNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSizeFunction node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSizeMethod node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTEmptyFunction node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTEmptyMethod node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTJexlScript node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTVar node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTReferenceExpression node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTIdentifier node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTArrayAccess node,
                       Object data)
Specified by:
visit in class ParserVisitor

isTernaryProtected

protected boolean isTernaryProtected(JexlNode node)
Check if a null evaluated expression is protected by a ternary expression.

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.

Parameters:
node - the expression node
Returns:
true if nullable variable, false otherwise

isLocalVariable

protected boolean isLocalVariable(ASTReference node,
                                  int which)
Checks whether a reference child node holds a local variable reference.

Parameters:
node - the reference node
which - the child we are checking
Returns:
true if child is local variable, false otherwise

visit

protected Object visit(ASTIdentifierAccess node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTReference node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTAssignment node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSetAddNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSetSubNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSetMultNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSetDivNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSetModNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSetAndNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSetOrNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTSetXorNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

executeAssign

protected Object executeAssign(JexlNode node,
                               JexlOperator assignop,
                               Object data)
Executes an assignment with an optional side-effect operator.

Parameters:
node - the node
assignop - the assignment operator or null if simply assignment
data - the data
Returns:
the left hand side

visit

protected Object[] visit(ASTArguments node,
                         Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTMethodNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTFunctionNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

call

protected Object call(JexlNode node,
                      Object target,
                      Object functor,
                      ASTArguments argNode)
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 node
target - the target of the method, what it should be invoked upon
functor - the object carrying the method or function or the method identifier
argNode - the node carrying the arguments
Returns:
the result of the method invocation

visit

protected Object visit(ASTConstructorNode node,
                       Object data)
Specified by:
visit in class ParserVisitor

getAttribute

public Object getAttribute(Object object,
                           Object attribute)
Gets an attribute of an object.

Parameters:
object - to retrieve value from
attribute - the attribute of the object, e.g. an index (1, 0, 2) or key for a map
Returns:
the attribute value

getAttribute

protected Object getAttribute(Object object,
                              Object attribute,
                              JexlNode node)
Gets an attribute of an object.

Parameters:
object - to retrieve value from
attribute - the attribute of the object, e.g. an index (1, 0, 2) or key for a map
node - the node that evaluated as the object
Returns:
the attribute value

setAttribute

public void setAttribute(Object object,
                         Object attribute,
                         Object value)
Sets an attribute of an object.

Parameters:
object - to set the value to
attribute - the attribute of the object, e.g. an index (1, 0, 2) or key for a map
value - the value to assign to the object's attribute

setAttribute

protected void setAttribute(Object object,
                            Object attribute,
                            Object value,
                            JexlNode node)
Sets an attribute of an object.

Parameters:
object - to set the value to
attribute - the attribute of the object, e.g. an index (1, 0, 2) or key for a map
value - the value to assign to the object's attribute
node - the node that evaluated as the object

visit

protected Object visit(ASTJxltLiteral node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTAnnotation node,
                       Object data)
Specified by:
visit in class ParserVisitor

visit

protected Object visit(ASTAnnotatedStatement node,
                       Object data)
Specified by:
visit in class ParserVisitor

processAnnotation

protected Object processAnnotation(ASTAnnotatedStatement stmt,
                                   int index,
                                   Object data)
Processes an annotated statement.

Parameters:
stmt - the statement
index - the index of the current annotation being processed
data - 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 name
args - the annotation arguments
stmt - the statement / block that was annotated
Returns:
the result of statement.call()
Throws:
Exception - if anything goes wrong


Copyright © 2001–2017 The Apache Software Foundation. All rights reserved.