Interface ExpressionNode

All Superinterfaces:
Node
All Known Implementing Classes:
AstBinary, AstBoolean, AstBracket, AstChoice, AstComposite, AstDot, AstEval, AstFunction, AstIdentifier, AstLiteral, AstMethod, AstNested, AstNode, AstNull, AstNumber, AstParameters, AstProperty, AstRightValue, AstString, AstText, AstUnary

public interface ExpressionNode extends Node
Expression node interface. This interface provides all the methods needed for value expressions and method expressions.
Author:
Christoph Beck
See Also:
  • Method Details

    • isLiteralText

      boolean isLiteralText()
      Returns:
      true if this node represents literal text
    • isLeftValue

      boolean isLeftValue()
      Returns:
      true if the subtree rooted at this node could be used as an lvalue expression (identifier or property sequence with non-literal prefix).
    • isMethodInvocation

      boolean isMethodInvocation()
      Returns:
      true if the subtree rooted at this node is a method invocation.
    • getValue

      Object getValue(Bindings bindings, jakarta.el.ELContext context, Class<?> expectedType)
      Evaluate node.
      Parameters:
      bindings - bindings containing variables and functions
      context - evaluation context
      expectedType - result type
      Returns:
      evaluated node, coerced to the expected type
    • getValueReference

      jakarta.el.ValueReference getValueReference(Bindings bindings, jakarta.el.ELContext context)
      Get value reference.
      Parameters:
      bindings -
      context -
      Returns:
      value reference
    • getType

      Class<?> getType(Bindings bindings, jakarta.el.ELContext context)
      Get the value type accepted in setValue(Bindings, ELContext, Object).
      Parameters:
      bindings - bindings containing variables and functions
      context - evaluation context
      Returns:
      accepted type or null for non-lvalue nodes
    • isReadOnly

      boolean isReadOnly(Bindings bindings, jakarta.el.ELContext context)
      Determine whether setValue(Bindings, ELContext, Object) will throw a PropertyNotWritableException.
      Parameters:
      bindings - bindings containing variables and functions
      context - evaluation context
      Returns:
      true if this a read-only expression node
    • setValue

      void setValue(Bindings bindings, jakarta.el.ELContext context, Object value)
      Assign value.
      Parameters:
      bindings - bindings containing variables and functions
      context - evaluation context
      value - value to set
    • getMethodInfo

      jakarta.el.MethodInfo getMethodInfo(Bindings bindings, jakarta.el.ELContext context, Class<?> returnType, Class<?>[] paramTypes)
      Get method information. If this is a non-lvalue node, answer null.
      Parameters:
      bindings - bindings containing variables and functions
      context - evaluation context
      returnType - expected method return type (may be null meaning don't care)
      paramTypes - expected method argument types
      Returns:
      method information or null
    • invoke

      Object invoke(Bindings bindings, jakarta.el.ELContext context, Class<?> returnType, Class<?>[] paramTypes, Object[] paramValues)
      Invoke method.
      Parameters:
      bindings - bindings containing variables and functions
      context - evaluation context
      returnType - expected method return type (may be null meaning don't care)
      paramTypes - expected method argument types
      paramValues - parameter values
      Returns:
      result of the method invocation
    • getStructuralId

      String getStructuralId(Bindings bindings)
      Get the canonical expression string for this node. Variable and funtion names will be replaced in a way such that two expression nodes that have the same node structure and bindings will also answer the same value here.

      For example, "${foo:bar()+2*foobar}" may lead to "${<fn>() + 2 * <var>}" if foobar is a bound variable. Otherwise, the structural id would be "${<fn>() + 2 * foobar}".

      If the bindings is null, the full canonical subexpression is returned.