类 SpelNodeImpl

java.lang.Object
cn.taketoday.expression.spel.ast.SpelNodeImpl
所有已实现的接口:
Opcodes, SpelNode
直接已知子类:
Assign, BeanReference, CompoundExpression, ConstructorReference, Elvis, FunctionReference, Identifier, Indexer, InlineList, InlineMap, Literal, MethodReference, Operator, OperatorNot, Projection, PropertyOrFieldReference, QualifiedIdentifier, Selection, Ternary, TypeReference, VariableReference

public abstract class SpelNodeImpl extends Object implements SpelNode, Opcodes
The common supertype of all AST nodes in a parsed Spring Expression Language format expression.
从以下版本开始:
4.0
作者:
Andy Clement, Juergen Hoeller, Harry Yang
  • 字段详细资料

    • NO_CHILDREN

      private static final SpelNodeImpl[] NO_CHILDREN
    • startPos

      private final int startPos
    • endPos

      private final int endPos
    • children

      protected SpelNodeImpl[] children
    • parent

      @Nullable private SpelNodeImpl parent
    • exitTypeDescriptor

      @Nullable protected volatile String exitTypeDescriptor
      Indicates the type descriptor for the result of this expression node. This is set as soon as it is known. For a literal node it is known immediately. For a property access or method invocation it is known after one evaluation of that node.

      The descriptor is like the bytecode form but is slightly easier to work with. It does not include the trailing semicolon (for non array reference types). Some examples: Ljava/lang/String, I, [I

  • 构造器详细资料

    • SpelNodeImpl

      public SpelNodeImpl(int startPos, int endPos)
    • SpelNodeImpl

      public SpelNodeImpl(int startPos, int endPos, SpelNodeImpl... operands)
  • 方法详细资料

    • nextChildIs

      protected boolean nextChildIs(Class<?>... classes)
      Return true if the next child is one of the specified classes.
    • getValue

      @Nullable public final Object getValue(ExpressionState expressionState) throws EvaluationException
      从接口复制的说明: SpelNode
      Evaluate the expression node in the context of the supplied expression state and return the value.
      指定者:
      getValue 在接口中 SpelNode
      参数:
      expressionState - the current expression state (includes the context)
      返回:
      the value of this node evaluated against the specified state
      抛出:
      EvaluationException
    • getTypedValue

      public final TypedValue getTypedValue(ExpressionState expressionState) throws EvaluationException
      从接口复制的说明: SpelNode
      Evaluate the expression node in the context of the supplied expression state and return the typed value.
      指定者:
      getTypedValue 在接口中 SpelNode
      参数:
      expressionState - the current expression state (includes the context)
      返回:
      the type value of this node evaluated against the specified state
      抛出:
      EvaluationException
    • isWritable

      public boolean isWritable(ExpressionState expressionState) throws EvaluationException
      从接口复制的说明: SpelNode
      Determine if this expression node will support a setValue() call.
      指定者:
      isWritable 在接口中 SpelNode
      参数:
      expressionState - the current expression state (includes the context)
      返回:
      true if the expression node will allow setValue()
      抛出:
      EvaluationException - if something went wrong trying to determine if the node supports writing
    • setValue

      public void setValue(ExpressionState expressionState, @Nullable Object newValue) throws EvaluationException
      从接口复制的说明: 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.
      指定者:
      setValue 在接口中 SpelNode
      参数:
      expressionState - the current expression state (includes the context)
      newValue - the new value
      抛出:
      EvaluationException - if any problem occurs evaluating the expression or setting the new value
    • setValueInternal

      public TypedValue setValueInternal(ExpressionState state, Supplier<TypedValue> valueSupplier) throws EvaluationException
      Evaluate the expression to a node and then set the new value created by the specified Supplier on that node.

      For example, if the expression evaluates to a property reference, then the property will be set to the new value.

      Favor this method over setValue(ExpressionState, Object) when the value should be lazily computed.

      By default, this method throws a SpelEvaluationException, effectively disabling this feature. Subclasses may override this method to provide an actual implementation.

      参数:
      state - the current expression state (includes the context)
      valueSupplier - a supplier of the new value
      抛出:
      EvaluationException - if any problem occurs evaluating the expression or setting the new value
    • getChild

      public SpelNode getChild(int index)
      从接口复制的说明: SpelNode
      Helper method that returns a SpelNode rather than an Antlr Tree node.
      指定者:
      getChild 在接口中 SpelNode
      返回:
      the child node cast to a SpelNode
    • getChildCount

      public int getChildCount()
      从接口复制的说明: SpelNode
      Return the number of children under this node.
      指定者:
      getChildCount 在接口中 SpelNode
      返回:
      the child count
    • getObjectClass

      @Nullable public Class<?> getObjectClass(@Nullable Object obj)
      从接口复制的说明: SpelNode
      Determine the class of the object passed in, unless it is already a class object.
      指定者:
      getObjectClass 在接口中 SpelNode
      参数:
      obj - the object that the caller wants the class of
      返回:
      the class of the object if it is not already a class object, or null if the object is null
    • getStartPosition

      public int getStartPosition()
      从接口复制的说明: SpelNode
      Return the start position of this AST node in the expression string.
      指定者:
      getStartPosition 在接口中 SpelNode
      返回:
      the start position
    • getEndPosition

      public int getEndPosition()
      从接口复制的说明: SpelNode
      Return the end position of this AST node in the expression string.
      指定者:
      getEndPosition 在接口中 SpelNode
      返回:
      the end position
    • isCompilable

      public boolean isCompilable()
      Check whether a node can be compiled to bytecode. The reasoning in each node may be different but will typically involve checking whether the exit type descriptor of the node is known and any relevant child nodes are compilable.
      返回:
      true if this node can be compiled to bytecode
    • generateCode

      public void generateCode(MethodVisitor mv, CodeFlow cf)
      Generate the bytecode for this node into the supplied visitor. Context info about the current expression being compiled is available in the codeflow object, e.g. including information about the type of the object currently on the stack.
      参数:
      mv - the ASM MethodVisitor into which code should be generated
      cf - a context object with info about what is on the stack
    • getExitDescriptor

      @Nullable public String getExitDescriptor()
    • getValue

      @Nullable protected final <T> T getValue(ExpressionState state, Class<T> desiredReturnType) throws EvaluationException
      抛出:
      EvaluationException
    • getValueRef

      protected ValueRef getValueRef(ExpressionState state) throws EvaluationException
      抛出:
      EvaluationException
    • getValueInternal

      public abstract TypedValue getValueInternal(ExpressionState expressionState) throws EvaluationException
      抛出:
      EvaluationException
    • generateCodeForArguments

      protected static void generateCodeForArguments(MethodVisitor mv, CodeFlow cf, Member member, SpelNodeImpl[] arguments)
      Generate code that handles building the argument values for the specified method. This method will take account of whether the invoked method is a varargs method and if it is then the argument values will be appropriately packaged into an array.
      参数:
      mv - the method visitor where code should be generated
      cf - the current codeflow
      member - the method or constructor for which arguments are being setup
      arguments - the expression nodes for the expression supplied argument values
    • generateCodeForArgument

      protected static void generateCodeForArgument(MethodVisitor mv, CodeFlow cf, SpelNodeImpl argument, String paramDesc)
      Ask an argument to generate its bytecode and then follow it up with any boxing/unboxing/checkcasting to ensure it matches the expected parameter descriptor.