Class Operator

java.lang.Object
org.springframework.expression.spel.ast.SpelNodeImpl
org.springframework.expression.spel.ast.Operator
All Implemented Interfaces:
org.springframework.asm.Opcodes, SpelNode
Direct Known Subclasses:
OpAnd, OpDec, OpDivide, OpEQ, OperatorBetween, OperatorInstanceof, OperatorMatches, OperatorPower, OpGE, OpGT, OpInc, OpLE, OpLT, OpMinus, OpModulus, OpMultiply, OpNE, OpOr, OpPlus

public abstract class Operator extends SpelNodeImpl
Common supertype for operators that operate on either one or two operands. In the case of multiply or divide there would be two operands, but for unary plus or minus, there is only one.
Since:
3.0
Author:
Andy Clement, Juergen Hoeller, Giovanni Dall'Oglio Risso, Sam Brannen
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    protected static final class 
    A descriptor comparison encapsulates the result of comparing descriptor for two operands and describes at what level they are compatible.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected String
     
    protected String
     

    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, V21, V9
  • Constructor Summary

    Constructors
    Constructor
    Description
    Operator(String payload, int startPos, int endPos, SpelNodeImpl... operands)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
    equalityCheck(EvaluationContext context, Object left, Object right)
    Perform an equality check for the given operand values.
    protected void
    generateComparisonCode(org.springframework.asm.MethodVisitor mv, CodeFlow cf, int compInstruction1, int compInstruction2)
    Numeric comparison operators share very similar generated code, only differing in two comparison instructions.
     
    final String
     
     
    protected boolean
     
    String format for all operators is the same '(' [operand] [operator] [operand] ')'.

    Methods inherited from class java.lang.Object

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

    • leftActualDescriptor

      @Nullable protected String leftActualDescriptor
    • rightActualDescriptor

      @Nullable protected String rightActualDescriptor
  • Constructor Details

    • Operator

      public Operator(String payload, int startPos, int endPos, SpelNodeImpl... operands)
  • Method Details

    • getLeftOperand

      public SpelNodeImpl getLeftOperand()
    • getRightOperand

      public SpelNodeImpl getRightOperand()
    • getOperatorName

      public final String getOperatorName()
    • toStringAST

      public String toStringAST()
      String format for all operators is the same '(' [operand] [operator] [operand] ')'.
      Returns:
      the string form
    • isCompilableOperatorUsingNumerics

      protected boolean isCompilableOperatorUsingNumerics()
    • generateComparisonCode

      protected void generateComparisonCode(org.springframework.asm.MethodVisitor mv, CodeFlow cf, int compInstruction1, int compInstruction2)
      Numeric comparison operators share very similar generated code, only differing in two comparison instructions.
    • equalityCheck

      public static boolean equalityCheck(EvaluationContext context, @Nullable Object left, @Nullable Object right)
      Perform an equality check for the given operand values.

      This method is not just used for reflective comparisons in subclasses but also from compiled expression code, which is why it needs to be declared as public static here.

      Parameters:
      context - the current evaluation context
      left - the left-hand operand value
      right - the right-hand operand value