类 SpelNodeImpl
- java.lang.Object
- org.springframework.expression.spel.ast.SpelNodeImpl
- 直接已知子类:
Assign
,BeanReference
,CompoundExpression
,ConstructorReference
,Elvis
,FunctionReference
,Identifier
,Indexer
,InlineList
,InlineMap
,Literal
,MethodReference
,Operator
,OperatorNot
,Projection
,PropertyOrFieldReference
,QualifiedIdentifier
,Selection
,Ternary
,TypeReference
,VariableReference
public abstract class SpelNodeImpl extends Object implements SpelNode, Opcodes
The common supertype of all AST nodes in a parsed Spring Expression Language format expression.- 从以下版本开始:
- 3.0
- 作者:
- Andy Clement
字段概要
字段 修饰符和类型 字段 说明 protected SpelNodeImpl[]
children
protected String
exitTypeDescriptor
Indicates the type descriptor for the result of this expression node.protected int
pos
从接口继承的字段 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_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, ASM4, ASM5, ASM6, 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, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V1_9
构造器概要
构造器 构造器 说明 SpelNodeImpl(int pos, SpelNodeImpl... operands)
方法概要
所有方法 静态方法 实例方法 抽象方法 具体方法 已过时的方法 修饰符和类型 方法 说明 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()
int
getEndPosition()
String
getExitDescriptor()
Class<?>
getObjectClass(Object obj)
Determine the class of the object passed in, unless it is already a class object.protected SpelNodeImpl
getPreviousChild()
已过时。int
getStartPosition()
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<?>... clazzes)
void
setValue(ExpressionState expressionState, Object newValue)
Evaluate the expression to a node and then set the new value on that node.从类继承的方法 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
从接口继承的方法 org.springframework.expression.spel.SpelNode
toStringAST
字段详细资料
pos
protected int pos
children
protected SpelNodeImpl[] children
exitTypeDescriptor
protected volatile String exitTypeDescriptor
Indicates the type descriptor for the result of this expression node. This is set as soon as it is known. For a literal node it is known immediately. For a property access or method invocation it is known after one evaluation of that node.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
构造器详细资料
SpelNodeImpl
public SpelNodeImpl(int pos, SpelNodeImpl... operands)
方法详细资料
getPreviousChild
@Deprecated protected SpelNodeImpl getPreviousChild()
已过时。
nextChildIs
protected boolean nextChildIs(Class<?>... clazzes)
- 返回:
- true if the next child is one of the specified classes
getValue
public final Object getValue(ExpressionState expressionState) throws EvaluationException
从接口复制的说明:SpelNode
Evaluate the expression node in the context of the supplied expression state and return the value.- 指定者:
getValue
在接口中SpelNode
- 参数:
expressionState
- the current expression state (includes the context)- 返回:
- the value of this node evaluated against the specified state
- 抛出:
EvaluationException
getTypedValue
public final TypedValue getTypedValue(ExpressionState expressionState) throws EvaluationException
从接口复制的说明:SpelNode
Evaluate the expression node in the context of the supplied expression state and return the typed value.- 指定者:
getTypedValue
在接口中SpelNode
- 参数:
expressionState
- the current expression state (includes the context)- 返回:
- the type value of this node evaluated against the specified state
- 抛出:
EvaluationException
isWritable
public boolean isWritable(ExpressionState expressionState) throws EvaluationException
从接口复制的说明:SpelNode
Determine if this expression node will support a setValue() call.- 指定者:
isWritable
在接口中SpelNode
- 参数:
expressionState
- the current expression state (includes the context)- 返回:
- true if the expression node will allow setValue()
- 抛出:
EvaluationException
- if something went wrong trying to determine if the node supports writing
setValue
public void setValue(ExpressionState expressionState, Object newValue) throws EvaluationException
从接口复制的说明:SpelNode
Evaluate the expression to a node and then set the new value on that node. For example, if the expression evaluates to a property reference, then the property will be set to the new value.- 指定者:
setValue
在接口中SpelNode
- 参数:
expressionState
- the current expression state (includes the context)newValue
- the new value- 抛出:
EvaluationException
- if any problem occurs evaluating the expression or setting the new value
getChild
public SpelNode getChild(int index)
从接口复制的说明:SpelNode
Helper method that returns a SpelNode rather than an Antlr Tree node.
getChildCount
public int getChildCount()
- 指定者:
getChildCount
在接口中SpelNode
- 返回:
- the number of children under this node
getObjectClass
public Class<?> getObjectClass(Object obj)
从接口复制的说明:SpelNode
Determine the class of the object passed in, unless it is already a class object.- 指定者:
getObjectClass
在接口中SpelNode
- 参数:
obj
- the object that the caller wants the class of- 返回:
- the class of the object if it is not already a class object, or
null
if the object isnull
getValue
protected final <T> T getValue(ExpressionState state, Class<T> desiredReturnType) throws EvaluationException
getStartPosition
public int getStartPosition()
- 指定者:
getStartPosition
在接口中SpelNode
- 返回:
- the start position of this Ast node in the expression string
getEndPosition
public int getEndPosition()
- 指定者:
getEndPosition
在接口中SpelNode
- 返回:
- the end position of this Ast node in the expression string
getValueRef
protected ValueRef getValueRef(ExpressionState state) throws EvaluationException
isCompilable
public boolean isCompilable()
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.- 返回:
true
if this node can be compiled to bytecode
generateCode
public void generateCode(MethodVisitor mv, CodeFlow cf)
Generate the bytecode for this node into the supplied visitor. Context info about the current expression being compiled is available in the codeflow object. For example it will include information about the type of the object currently on the stack.- 参数:
mv
- the ASM MethodVisitor into which code should be generatedcf
- a context object with info about what is on the stack
getExitDescriptor
public String getExitDescriptor()
getValueInternal
public abstract TypedValue getValueInternal(ExpressionState expressionState) throws EvaluationException
generateCodeForArguments
protected static void generateCodeForArguments(MethodVisitor mv, CodeFlow cf, Member member, SpelNodeImpl[] arguments)
Generate code that handles building the argument values for the specified method. This method will take account of whether the invoked method is a varargs method and if it is then the argument values will be appropriately packaged into an array.- 参数:
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 values
generateCodeForArgument
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.