org.apache.commons.jexl2
Class Interpreter

java.lang.Object
  extended by org.apache.commons.jexl2.Interpreter
All Implemented Interfaces:
ParserVisitor

public class Interpreter
extends Object
implements ParserVisitor

An interpreter of JEXL syntax.

Since:
2.0

Field Summary
protected  JexlArithmetic arithmetic
          The arithmetic handler.
protected  boolean cache
          Cache executors.
protected  JexlContext context
          The context to store/retrieve variables.
protected static Object[] EMPTY_PARAMS
          Empty parameters for method matching.
protected  Map<String,Object> functions
          The map of registered functions.
protected  Map<String,Object> functors
          The map of registered functions.
protected  org.apache.commons.logging.Log logger
          The logger.
protected  Object[] registers
          Registers made of 2 pairs of {register-name, value}.
protected  boolean silent
          Silent intepreter flag.
protected  boolean strict
          Strict interpreter flag.
protected  Uberspect uberspect
          The uberspect.
 
Constructor Summary
Interpreter(JexlEngine jexl, JexlContext aContext)
          Creates an interpreter.
 
Method Summary
protected  JexlNode findNullOperand(RuntimeException xrt, JexlNode node, Object left, Object right)
          Finds the node causing a NPE for diadic operators.
 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.
protected  Uberspect getUberspect()
          Gets the uberspect.
 Object interpret(JexlNode node)
          Interpret the given script/expression.
protected  Object invocationFailed(JexlException xjexl)
          Triggered when method, function or constructor invocation fails.
 boolean isSilent()
          Checks whether this interpreter throws JexlException during evaluation.
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  void setRegisters(Object... theRegisters)
          Sets this interpreter registers for bean access/assign expressions.
 void setSilent(boolean flag)
          Sets whether this interpreter throws JexlException during evaluation.
protected  Object unknownVariable(JexlException xjexl)
          Triggered when variable can not be resolved.
 Object visit(ASTAdditiveNode node, Object data)
          
 Object visit(ASTAdditiveOperator node, Object data)
          
 Object visit(ASTAmbiguous node, Object data)
          Unused, should throw in Parser.
 Object visit(ASTAndNode node, Object data)
          
 Object visit(ASTArrayAccess node, Object data)
          
 Object visit(ASTArrayLiteral node, Object data)
          
 Object visit(ASTAssignment node, Object data)
          
 Object visit(ASTBitwiseAndNode node, Object data)
          
 Object visit(ASTBitwiseComplNode node, Object data)
          
 Object visit(ASTBitwiseOrNode node, Object data)
          
 Object visit(ASTBitwiseXorNode node, Object data)
          
 Object visit(ASTBlock node, Object data)
          
 Object visit(ASTConstructorNode node, Object data)
          
 Object visit(ASTDivNode node, Object data)
          
 Object visit(ASTEmptyFunction node, Object data)
          
 Object visit(ASTEQNode node, Object data)
          
 Object visit(ASTERNode node, Object data)
          
 Object visit(ASTFalseNode node, Object data)
          
 Object visit(ASTFloatLiteral node, Object data)
          
 Object visit(ASTForeachStatement node, Object data)
          
 Object visit(ASTFunctionNode node, Object data)
          
 Object visit(ASTGENode node, Object data)
          
 Object visit(ASTGTNode node, Object data)
          
 Object visit(ASTIdentifier node, Object data)
          
 Object visit(ASTIfStatement node, Object data)
          
 Object visit(ASTIntegerLiteral node, Object data)
          
 Object visit(ASTJexlScript node, Object data)
          
 Object visit(ASTLENode node, Object data)
          
 Object visit(ASTLTNode node, Object data)
          
 Object visit(ASTMapEntry node, Object data)
          
 Object visit(ASTMapLiteral node, Object data)
          
 Object visit(ASTMethodNode node, Object data)
          
 Object visit(ASTModNode node, Object data)
          
 Object visit(ASTMulNode node, Object data)
          
 Object visit(ASTNENode node, Object data)
          
 Object visit(ASTNotNode node, Object data)
          
 Object visit(ASTNRNode node, Object data)
          
 Object visit(ASTNullLiteral node, Object data)
          
 Object visit(ASTOrNode node, Object data)
          
 Object visit(ASTReference node, Object data)
          
 Object visit(ASTSizeFunction node, Object data)
          
 Object visit(ASTSizeMethod node, Object data)
          
 Object visit(ASTStringLiteral node, Object data)
          
 Object visit(ASTTernaryNode node, Object data)
          
 Object visit(ASTTrueNode node, Object data)
          
 Object visit(ASTUnaryMinusNode node, Object data)
          
 Object visit(ASTWhileStatement node, Object data)
          
 Object visit(SimpleNode node, Object data)
          Unused, satisfy ParserVisitor interface.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

protected final org.apache.commons.logging.Log logger
The logger.


uberspect

protected final Uberspect uberspect
The uberspect.


arithmetic

protected final JexlArithmetic arithmetic
The arithmetic handler.


functions

protected final Map<String,Object> functions
The map of registered functions.


functors

protected Map<String,Object> functors
The map of registered functions.


context

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


strict

protected final boolean strict
Strict interpreter flag.


silent

protected boolean silent
Silent intepreter flag.


cache

protected final boolean cache
Cache executors.


registers

protected Object[] registers
Registers made of 2 pairs of {register-name, value}.


EMPTY_PARAMS

protected static final Object[] EMPTY_PARAMS
Empty parameters for method matching.

Constructor Detail

Interpreter

public Interpreter(JexlEngine jexl,
                   JexlContext aContext)
Creates an interpreter.

Parameters:
jexl - the engine creating this interpreter
aContext - the context to evaluate expression
Method Detail

setSilent

public void setSilent(boolean flag)
Sets whether this interpreter throws JexlException during evaluation.

Parameters:
flag - true means no JexlException will be thrown but will be logged as info through the Jexl engine logger, false allows them to be thrown.

isSilent

public boolean isSilent()
Checks whether this interpreter throws JexlException during evaluation.

Returns:
true if silent, false otherwise

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 info.

Parameters:
node - the script or expression to interpret.
Returns:
the result of the interpretation.
Throws:
JexlException - if any error occurs during interpretation.

getUberspect

protected Uberspect getUberspect()
Gets the uberspect.

Returns:
an Uberspect

setRegisters

protected void setRegisters(Object... theRegisters)
Sets this interpreter registers for bean access/assign expressions.

Parameters:
theRegisters - the array of registers

findNullOperand

protected JexlNode findNullOperand(RuntimeException xrt,
                                   JexlNode node,
                                   Object left,
                                   Object right)
Finds the node causing a NPE for diadic operators.

Parameters:
xrt - the RuntimeException
node - the parent node
left - the left argument
right - the right argument
Returns:
the left, right or parent node

unknownVariable

protected Object unknownVariable(JexlException xjexl)
Triggered when variable can not be resolved.

Parameters:
xjexl - the JexlException ("undefined variable " + variable)
Returns:
throws JexlException if strict, null otherwise

invocationFailed

protected Object invocationFailed(JexlException xjexl)
Triggered when method, function or constructor invocation fails.

Parameters:
xjexl - the JexlException wrapping the original error
Returns:
throws JexlException if strict, null otherwise

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

public Object visit(ASTAdditiveNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTAdditiveOperator node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTAndNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTArrayAccess node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTArrayLiteral node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTAssignment node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTBitwiseAndNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTBitwiseComplNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTBitwiseOrNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTBitwiseXorNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTBlock node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTDivNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTEmptyFunction node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTEQNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTFalseNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTFloatLiteral node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTForeachStatement node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTGENode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTGTNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTERNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTIdentifier node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTIfStatement node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTIntegerLiteral node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTJexlScript node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTLENode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTLTNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTMapEntry node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTMapLiteral node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTMethodNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTConstructorNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTFunctionNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTModNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTMulNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTNENode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTNRNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTNotNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTNullLiteral node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTOrNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTReference node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTSizeFunction node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTSizeMethod node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTStringLiteral node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTTernaryNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTTrueNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTUnaryMinusNode node,
                    Object data)

Specified by:
visit in interface ParserVisitor

visit

public Object visit(ASTWhileStatement node,
                    Object data)

Specified by:
visit in interface 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

public Object visit(SimpleNode node,
                    Object data)
Unused, satisfy ParserVisitor interface.

Specified by:
visit in interface ParserVisitor
Parameters:
node - a node
data - the data
Returns:
does not return

visit

public Object visit(ASTAmbiguous node,
                    Object data)
Unused, should throw in Parser.

Specified by:
visit in interface ParserVisitor
Parameters:
node - a node
data - the data
Returns:
does not return


Copyright © 2001-2011 Apache Software Foundation. All Rights Reserved.