Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.apache.commons.jexl3.internal
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

    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

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

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