Class Elvis
?:
. For an expression a?:b
if a
is neither null
nor an empty String, the value of the expression is a
.
If a
is null or the empty String, then the value of the expression is b
.- Since:
- 3.0
- Author:
- Andy Clement, Juergen Hoeller, Sam Brannen
-
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, V21, V22, V23, 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) Evaluate the condition and if neither null nor an empty String, return it.boolean
Determine if this node can be compiled to bytecode.Return the string form of this AST node.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
-
Elvis
-
-
Method Details
-
getValueInternal
Evaluate the condition and if neither null nor an empty String, return it. If it is null or an empty String, return the other value.- Specified by:
getValueInternal
in classSpelNodeImpl
- Parameters:
state
- the expression state- Throws:
EvaluationException
- if the condition does not evaluate correctly to a boolean or there is a problem executing the chosen alternative
-
toStringAST
Description copied from interface:SpelNode
Return the string form of this AST node.- Returns:
- the string form
-
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:
-