Class OpMultiply
java.lang.Object
org.springframework.expression.spel.ast.SpelNodeImpl
org.springframework.expression.spel.ast.Operator
org.springframework.expression.spel.ast.OpMultiply
Implements the
multiply
operator.
Conversions and promotions are handled as defined in
Section 5.6.2 of the
Java Language Specification, with the addiction of BigDecimal
/BigInteger
management:
If any of the operands is of a reference type, unboxing conversion (Section 5.1.8)
is performed. Then:
If either operand is of type BigDecimal
, the other is converted to BigDecimal
.
If either operand is of type double, the other is converted to double.
Otherwise, if either operand is of type float, the other is converted to float.
If either operand is of type BigInteger
, the other is converted to BigInteger
.
Otherwise, if either operand is of type long, the other is converted to long.
Otherwise, both operands are converted to type int.
- Since:
- 3.0
- Author:
- Andy Clement, Juergen Hoeller, Sam Brannen, Giovanni Dall'Oglio Risso
-
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, V9
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
generateCode
(MethodVisitor mv, CodeFlow cf) Generate the bytecode for this node into the supplied visitor.getValueInternal
(ExpressionState state) Implements themultiply
operator directly here for certain types of supported operands and otherwise delegates to any registered overloader for types not supported here.boolean
Check whether a node can be compiled to bytecode.Methods inherited from class org.springframework.expression.spel.ast.Operator
equalityCheck, generateComparisonCode, getLeftOperand, getOperatorName, getRightOperand, isCompilableOperatorUsingNumerics, toStringAST
Methods inherited from class org.springframework.expression.spel.ast.SpelNodeImpl
generateCodeForArgument, generateCodeForArguments, getChild, getChildCount, getEndPosition, getExitDescriptor, getObjectClass, getStartPosition, getTypedValue, getValue, getValue, getValueRef, isWritable, nextChildIs, setValue, setValueInternal
-
Constructor Details
-
OpMultiply
-
-
Method Details
-
getValueInternal
Implements themultiply
operator directly here for certain types of supported operands and otherwise delegates to any registered overloader for types not supported here.Supported operand types:
- numbers
- String and int ('abc' * 2 == 'abcabc')
- Specified by:
getValueInternal
in classSpelNodeImpl
- Throws:
EvaluationException
-
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 classSpelNodeImpl
- Returns:
true
if this node can be compiled to bytecode
-
generateCode
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 classSpelNodeImpl
- Parameters:
mv
- the ASM MethodVisitor into which code should be generatedcf
- a context object with info about what is on the stack
-