org.springframework.expression.spel.ast

## Class SpelNodeImpl

- java.lang.Object
- - org.springframework.expression.spel.ast.SpelNodeImpl

All Implemented Interfaces:
  SpelNode

Direct Known Subclasses:
  Assign, BeanReference, CompoundExpression, ConstructorReference, Elvis, FunctionReference, Identifier, Indexer, InlineList, Literal, MethodReference, Operator, OperatorNot, Projection, PropertyOrFieldReference, QualifiedIdentifier, Selection, Ternary, TypeReference, VariableReference

    public abstract class SpelNodeImpl
    extends Object
    implements SpelNode

The common supertype of all AST nodes in a parsed Spring Expression Language format expression.

Since:
  3.0
Author:
  Andy Clement

### Field Summary

Fields
`protected SpelNodeImpl[]` `children`
`protected int` `pos`

### Constructor Summary

Constructors
Constructor and Description
`SpelNodeImpl(int pos, SpelNodeImpl... operands)`

### Method Summary

Methods
`SpelNode` `getChild(int index)` Helper method that returns a SpelNode rather than an Antlr Tree node.
`int` `getChildCount()`
`int` `getEndPosition()`
`Class<?>` `getObjectClass(Object obj)` Determine the class of the object passed in, unless it is already a class object.
`protected SpelNodeImpl` `getPreviousChild()`
`int` `getStartPosition()`
`TypedValue` `getTypedValue(ExpressionState expressionState)` Evaluate the expression node in the context of the supplied expression state and return the typed value.
`Object` `getValue(ExpressionState expressionState)` Evaluate the expression node in the context of the supplied expression state and return the value.
`protected <T> T` `getValue(ExpressionState state, Class<T> desiredReturnType)`
`abstract TypedValue` `getValueInternal(ExpressionState expressionState)`
`protected ValueRef` `getValueRef(ExpressionState state)`
`boolean` `isWritable(ExpressionState expressionState)` Determine if this expression node will support a setValue() call.
`protected boolean` `nextChildIs(Class... clazzes)`
`void` `setValue(ExpressionState expressionState, Object newValue)` Evaluate the expression to a node and then set the new value on that node.
`abstract String` `toStringAST()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### pos

    protected int pos

#### children

    protected SpelNodeImpl[] children

### Constructor Detail

#### SpelNodeImpl

    public SpelNodeImpl(int pos,
                SpelNodeImpl... operands)

### Method Detail

#### getPreviousChild

    protected SpelNodeImpl getPreviousChild()

#### nextChildIs

    protected boolean nextChildIs(Class... clazzes)

Returns:
  true if the next child is one of the specified classes

#### getValue

    public final Object getValue(ExpressionState expressionState)
                          throws EvaluationException

Description copied from interface: `SpelNode`
Evaluate the expression node in the context of the supplied expression state and return the value.

Specified by:
  `getValue` in interface `SpelNode`
Parameters:
  `expressionState` - the current expression state (includes the context)
Returns:
  the value of this node evaluated against the specified state
Throws:
  `EvaluationException`

#### getTypedValue

    public final TypedValue getTypedValue(ExpressionState expressionState)
                                   throws EvaluationException

Description copied from interface: `SpelNode`
Evaluate the expression node in the context of the supplied expression state and return the typed value.

Specified by:
  `getTypedValue` in interface `SpelNode`
Parameters:
  `expressionState` - the current expression state (includes the context)
Returns:
  the type value of this node evaluated against the specified state
Throws:
  `EvaluationException`

#### isWritable

    public boolean isWritable(ExpressionState expressionState)
                       throws EvaluationException

Description copied from interface: `SpelNode`
Determine if this expression node will support a setValue() call.

Specified by:
  `isWritable` in interface `SpelNode`
Parameters:
  `expressionState` - the current expression state (includes the context)
Returns:
  true if the expression node will allow setValue()
Throws:
  `EvaluationException` - if something went wrong trying to determine if the node supports writing

#### setValue

    public void setValue(ExpressionState expressionState,
                Object newValue)
                  throws EvaluationException

Description copied from interface: `SpelNode`
Evaluate the expression to a node and then set the new value on that node. For example, if the expression evaluates to a property reference then the property will be set to the new value.

Specified by:
  `setValue` in interface `SpelNode`
Parameters:
  `expressionState` - the current expression state (includes the context)
  `newValue` - the new value
Throws:
  `EvaluationException` - if any problem occurs evaluating the expression or setting the new value

#### getChild

    public SpelNode getChild(int index)

Description copied from interface: `SpelNode`
Helper method that returns a SpelNode rather than an Antlr Tree node.

Specified by:
  `getChild` in interface `SpelNode`
Returns:
  the child node cast to a SpelNode

#### getChildCount

    public int getChildCount()

Specified by:
  `getChildCount` in interface `SpelNode`
Returns:
  the number of children under this node

#### getObjectClass

    public Class<?> getObjectClass(Object obj)

Description copied from interface: `SpelNode`
Determine the class of the object passed in, unless it is already a class object.

Specified by:
  `getObjectClass` in interface `SpelNode`
Parameters:
  `obj` - the object that the caller wants the class of
Returns:
  the class of the object if it is not already a class object, or null if the object is null

#### getValue

    protected final <T> T getValue(ExpressionState state,
                 Class<T> desiredReturnType)
                        throws EvaluationException

Throws:
  `EvaluationException`

#### getValueInternal

    public abstract TypedValue getValueInternal(ExpressionState expressionState)
                                         throws EvaluationException

Throws:
  `EvaluationException`

#### toStringAST

    public abstract String toStringAST()

Specified by:
  `toStringAST` in interface `SpelNode`
Returns:
  the string form of this AST node

#### getStartPosition

    public int getStartPosition()

Specified by:
  `getStartPosition` in interface `SpelNode`
Returns:
  the start position of this Ast node in the expression string

#### getEndPosition

    public int getEndPosition()

Specified by:
  `getEndPosition` in interface `SpelNode`
Returns:
  the end position of this Ast node in the expression string

#### getValueRef

    protected ValueRef getValueRef(ExpressionState state)
                            throws EvaluationException

Throws:
  `EvaluationException`