public abstract class SpelNodeImpl extends Object implements SpelNode, Opcodes
| Modifier and Type | Field and Description |
|---|---|
protected SpelNodeImpl[] |
children |
protected String |
exitTypeDescriptor
Indicates the type descriptor for the result of this expression node.
|
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, V9| Constructor and Description |
|---|
SpelNodeImpl(int startPos,
int endPos,
SpelNodeImpl... operands) |
| Modifier and Type | Method and Description |
|---|---|
void |
generateCode(MethodVisitor mv,
CodeFlow cf)
Generate the bytecode for this node into the supplied visitor.
|
protected static void |
generateCodeForArgument(MethodVisitor mv,
CodeFlow cf,
SpelNodeImpl argument,
String paramDesc)
Ask an argument to generate its bytecode and then follow it up
with any boxing/unboxing/checkcasting to ensure it matches the expected parameter descriptor.
|
protected static void |
generateCodeForArguments(MethodVisitor mv,
CodeFlow cf,
Member member,
SpelNodeImpl[] arguments)
Generate code that handles building the argument values for the specified method.
|
SpelNode |
getChild(int index)
Helper method that returns a SpelNode rather than an Antlr Tree node.
|
int |
getChildCount()
Return the number of children under this node.
|
int |
getEndPosition()
Return the end position of this AST node in the expression string.
|
String |
getExitDescriptor() |
Class<?> |
getObjectClass(Object obj)
Determine the class of the object passed in, unless it is already a class object.
|
int |
getStartPosition()
Return the start position of this AST node in the expression string.
|
TypedValue |
getTypedValue(ExpressionState expressionState)
Evaluate the expression node in the context of the supplied expression state
and return the typed value.
|
Object |
getValue(ExpressionState expressionState)
Evaluate the expression node in the context of the supplied expression state
and return the value.
|
protected <T> T |
getValue(ExpressionState state,
Class<T> desiredReturnType) |
abstract TypedValue |
getValueInternal(ExpressionState expressionState) |
protected ValueRef |
getValueRef(ExpressionState state) |
boolean |
isCompilable()
Check whether a node can be compiled to bytecode.
|
boolean |
isWritable(ExpressionState expressionState)
Determine if this expression node will support a setValue() call.
|
protected boolean |
nextChildIs(Class<?>... classes)
Return
true if the next child is one of the specified classes. |
void |
setValue(ExpressionState expressionState,
Object newValue)
Evaluate the expression to a node and then set the new value on that node.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waittoStringASTprotected SpelNodeImpl[] children
@Nullable protected volatile String exitTypeDescriptor
The descriptor is like the bytecode form but is slightly easier to work with. It does not include the trailing semicolon (for non array reference types). Some examples: Ljava/lang/String, I, [I
public SpelNodeImpl(int startPos,
int endPos,
SpelNodeImpl... operands)
protected boolean nextChildIs(Class<?>... classes)
true if the next child is one of the specified classes.@Nullable public final Object getValue(ExpressionState expressionState) throws EvaluationException
SpelNodegetValue in interface SpelNodeexpressionState - the current expression state (includes the context)EvaluationExceptionpublic final TypedValue getTypedValue(ExpressionState expressionState) throws EvaluationException
SpelNodegetTypedValue in interface SpelNodeexpressionState - the current expression state (includes the context)EvaluationExceptionpublic boolean isWritable(ExpressionState expressionState) throws EvaluationException
SpelNodeisWritable in interface SpelNodeexpressionState - the current expression state (includes the context)EvaluationException - if something went wrong trying to determine
if the node supports writingpublic void setValue(ExpressionState expressionState, @Nullable Object newValue) throws EvaluationException
SpelNodesetValue in interface SpelNodeexpressionState - the current expression state (includes the context)newValue - the new valueEvaluationException - if any problem occurs evaluating the expression or
setting the new valuepublic SpelNode getChild(int index)
SpelNodepublic int getChildCount()
SpelNodegetChildCount in interface SpelNode@Nullable public Class<?> getObjectClass(@Nullable Object obj)
SpelNodegetObjectClass in interface SpelNodeobj - the object that the caller wants the class ofnull if the object is nullpublic int getStartPosition()
SpelNodegetStartPosition in interface SpelNodepublic int getEndPosition()
SpelNodegetEndPosition in interface SpelNodepublic boolean isCompilable()
true if this node can be compiled to bytecodepublic void generateCode(MethodVisitor mv, CodeFlow cf)
mv - the ASM MethodVisitor into which code should be generatedcf - a context object with info about what is on the stack@Nullable protected final <T> T getValue(ExpressionState state, Class<T> desiredReturnType) throws EvaluationException
EvaluationExceptionprotected ValueRef getValueRef(ExpressionState state) throws EvaluationException
EvaluationExceptionpublic abstract TypedValue getValueInternal(ExpressionState expressionState) throws EvaluationException
EvaluationExceptionprotected static void generateCodeForArguments(MethodVisitor mv, CodeFlow cf, Member member, SpelNodeImpl[] arguments)
mv - the method visitor where code should be generatedcf - the current codeflowmember - the method or constructor for which arguments are being setuparguments - the expression nodes for the expression supplied argument valuesprotected static void generateCodeForArgument(MethodVisitor mv, CodeFlow cf, SpelNodeImpl argument, String paramDesc)