Class VariableReference

java.lang.Object
org.springframework.expression.spel.ast.SpelNodeImpl
org.springframework.expression.spel.ast.VariableReference
All Implemented Interfaces:
org.springframework.asm.Opcodes, SpelNode

public class VariableReference extends SpelNodeImpl
Represents a variable reference, eg. #someVar. Note this is different to a *local* variable like $someVar
Since:
3.0
Author:
Andy Clement
  • Field Summary

    Fields inherited from class org.springframework.expression.spel.ast.SpelNodeImpl

    children, exitTypeDescriptor

    Fields inherited from interface org.springframework.asm.Opcodes

    AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V9
  • Constructor Summary

    Constructors
    Constructor
    Description
    VariableReference(String variableName, int startPos, int endPos)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    generateCode(org.springframework.asm.MethodVisitor mv, CodeFlow cf)
    Generate the bytecode for this node into the supplied visitor.
     
     
    boolean
    Check whether a node can be compiled to bytecode.
    boolean
    isWritable(ExpressionState expressionState)
    Determine if this expression node will support a setValue() call.
    void
    Evaluate the expression to a node and then set the new value on that node.
    Return the string form of this AST node.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • VariableReference

      public VariableReference(String variableName, int startPos, int endPos)
  • Method Details

    • getValueRef

      public ValueRef getValueRef(ExpressionState state) throws SpelEvaluationException
      Overrides:
      getValueRef in class SpelNodeImpl
      Throws:
      SpelEvaluationException
    • getValueInternal

      public TypedValue getValueInternal(ExpressionState state) throws SpelEvaluationException
      Specified by:
      getValueInternal in class SpelNodeImpl
      Throws:
      SpelEvaluationException
    • setValue

      public void setValue(ExpressionState state, @Nullable Object value) throws SpelEvaluationException
      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
      Overrides:
      setValue in class SpelNodeImpl
      Parameters:
      state - the current expression state (includes the context)
      value - the new value
      Throws:
      SpelEvaluationException
    • toStringAST

      public String toStringAST()
      Description copied from interface: SpelNode
      Return the string form of this AST node.
      Returns:
      the string form
    • isWritable

      public boolean isWritable(ExpressionState expressionState) throws SpelEvaluationException
      Description copied from interface: SpelNode
      Determine if this expression node will support a setValue() call.
      Specified by:
      isWritable in interface SpelNode
      Overrides:
      isWritable in class SpelNodeImpl
      Parameters:
      expressionState - the current expression state (includes the context)
      Returns:
      true if the expression node will allow setValue()
      Throws:
      SpelEvaluationException
    • isCompilable

      public boolean isCompilable()
      Description copied from class: SpelNodeImpl
      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.
      Overrides:
      isCompilable in class SpelNodeImpl
      Returns:
      true if this node can be compiled to bytecode
    • generateCode

      public void generateCode(org.springframework.asm.MethodVisitor mv, CodeFlow cf)
      Description copied from class: SpelNodeImpl
      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.
      Overrides:
      generateCode in class SpelNodeImpl
      Parameters:
      mv - the ASM MethodVisitor into which code should be generated
      cf - a context object with info about what is on the stack