Class OpMinus
- subtraction of numbers
- subtraction of an int from a string of one character
(effectively decreasing that character), so
'd' - 3 = 'a'
It can be used as a unary operator for numbers. The standard promotions are performed when the operand types vary (double-int=double). For other options it defers to the registered overloader.
- Since:
- 3.0
- Author:
- Andy Clement, Juergen Hoeller, Giovanni Dall'Oglio Risso, Sam Brannen, Semyon Danilov
-
Nested Class Summary
Nested classes/interfaces inherited from class org.springframework.expression.spel.ast.Operator
Operator.DescriptorComparison
-
Field Summary
Fields inherited from class org.springframework.expression.spel.ast.Operator
leftActualDescriptor, rightActualDescriptor
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, V22, V23, V24, V9
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
generateCode
(MethodVisitor mv, CodeFlow cf) Generate the bytecode for this node into the suppliedMethodVisitor
.getValueInternal
(ExpressionState state) boolean
Determine if this node can be compiled to bytecode.boolean
Determine if this operator is a unary minus and its child is a number literal.String format for all operators is the same'(' [operand] [operator] [operand] ')'
.Methods inherited from class org.springframework.expression.spel.ast.Operator
equalityCheck, generateComparisonCode, getLeftOperand, getOperatorName, isCompilableOperatorUsingNumerics
Methods inherited from class org.springframework.expression.spel.ast.SpelNodeImpl
generateCodeForArgument, generateCodeForArguments, generateCodeForArguments, getChild, getChildCount, getEndPosition, getExitDescriptor, getObjectClass, getStartPosition, getTypedValue, getValue, getValue, getValueRef, isNullSafe, isWritable, nextChildIs, setValue, setValueInternal
-
Constructor Details
-
OpMinus
-
-
Method Details
-
isNegativeNumberLiteral
public boolean isNegativeNumberLiteral()Determine if this operator is a unary minus and its child is a number literal.- Returns:
true
if it is a negative number literal- Since:
- 6.1
-
getValueInternal
- Specified by:
getValueInternal
in classSpelNodeImpl
- Throws:
EvaluationException
-
toStringAST
Description copied from class:Operator
String format for all operators is the same'(' [operand] [operator] [operand] ')'
.- Specified by:
toStringAST
in interfaceSpelNode
- Overrides:
toStringAST
in classOperator
- Returns:
- the string form
-
getRightOperand
- Overrides:
getRightOperand
in classOperator
-
isCompilable
public boolean isCompilable()Description copied from interface:SpelNode
Determine if this 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.
The default implementation returns
false
.If you override this method, you must also override
SpelNode.generateCode(MethodVisitor, CodeFlow)
.- Returns:
true
if this node can be compiled to bytecode- See Also:
-
generateCode
Description copied from interface:SpelNode
Generate the bytecode for this node into the suppliedMethodVisitor
.Context information about the current expression being compiled is available in the supplied
CodeFlow
object — for example, information about the type of the object currently on the stack.This method will not be invoked unless
SpelNode.isCompilable()
returnstrue
.The default implementation throws an
IllegalStateException
sinceSpelNode.isCompilable()
returnsfalse
by default.If you override this method, you must also override
SpelNode.isCompilable()
.- Parameters:
mv
- the ASMMethodVisitor
into which code should be generatedcf
- a context object with information about what is on the stack- See Also:
-