类 SpelNodeImpl
java.lang.Object
cn.taketoday.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
The common supertype of all AST nodes in a parsed Spring Expression Language
format expression.
- 从以下版本开始:
- 4.0
- 作者:
- Andy Clement, Juergen Hoeller, Harry Yang
-
字段概要
字段修饰符和类型字段说明protected SpelNodeImpl[]private final intprotected StringIndicates the type descriptor for the result of this expression node.private static final SpelNodeImpl[]private SpelNodeImplprivate final int从接口继承的字段 cn.taketoday.bytecode.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, 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, JAVA_VERSION, 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, PRIVATE_FINAL_STATIC, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, SWITCH_STYLE_HASH, SWITCH_STYLE_HASHONLY, SWITCH_STYLE_TRIE, 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, V9 -
构造器概要
构造器构造器说明SpelNodeImpl(int startPos, int endPos) SpelNodeImpl(int startPos, int endPos, SpelNodeImpl... operands) -
方法概要
修饰符和类型方法说明voidgenerateCode(MethodVisitor mv, CodeFlow cf) Generate the bytecode for this node into the supplied visitor.protected static voidgenerateCodeForArgument(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 voidgenerateCodeForArguments(MethodVisitor mv, CodeFlow cf, Member member, SpelNodeImpl[] arguments) Generate code that handles building the argument values for the specified method.getChild(int index) Helper method that returns a SpelNode rather than an Antlr Tree node.intReturn the number of children under this node.intReturn the end position of this AST node in the expression string.Class<?>getObjectClass(Object obj) Determine the class of the object passed in, unless it is already a class object.intReturn the start position of this AST node in the expression string.final TypedValuegetTypedValue(ExpressionState expressionState) Evaluate the expression node in the context of the supplied expression state and return the typed value.final ObjectgetValue(ExpressionState expressionState) Evaluate the expression node in the context of the supplied expression state and return the value.protected final <T> TgetValue(ExpressionState state, Class<T> desiredReturnType) abstract TypedValuegetValueInternal(ExpressionState expressionState) protected ValueRefgetValueRef(ExpressionState state) booleanCheck whether a node can be compiled to bytecode.booleanisWritable(ExpressionState expressionState) Determine if this expression node will support a setValue() call.protected booleannextChildIs(Class<?>... classes) Returntrueif the next child is one of the specified classes.voidsetValue(ExpressionState expressionState, Object newValue) Evaluate the expression to a node and then set the new value on that node.setValueInternal(ExpressionState state, Supplier<TypedValue> valueSupplier) Evaluate the expression to a node and then set the new value created by the specifiedSupplieron that node.从类继承的方法 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait从接口继承的方法 cn.taketoday.expression.spel.SpelNode
toStringAST
-
字段详细资料
-
NO_CHILDREN
-
startPos
private final int startPos -
endPos
private final int endPos -
children
-
parent
-
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 startPos, int endPos) -
SpelNodeImpl
-
-
方法详细资料
-
nextChildIs
Returntrueif the next child is one of the specified classes. -
getValue
从接口复制的说明:SpelNodeEvaluate 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
从接口复制的说明:SpelNodeEvaluate 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
从接口复制的说明:SpelNodeDetermine 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, @Nullable Object newValue) throws EvaluationException 从接口复制的说明:SpelNodeEvaluate 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
-
setValueInternal
public TypedValue setValueInternal(ExpressionState state, Supplier<TypedValue> valueSupplier) throws EvaluationException Evaluate the expression to a node and then set the new value created by the specifiedSupplieron that node.For example, if the expression evaluates to a property reference, then the property will be set to the new value.
Favor this method over
setValue(ExpressionState, Object)when the value should be lazily computed.By default, this method throws a
SpelEvaluationException, effectively disabling this feature. Subclasses may override this method to provide an actual implementation.- 参数:
state- the current expression state (includes the context)valueSupplier- a supplier of the new value- 抛出:
EvaluationException- if any problem occurs evaluating the expression or setting the new value
-
getChild
从接口复制的说明:SpelNodeHelper method that returns a SpelNode rather than an Antlr Tree node. -
getChildCount
public int getChildCount()从接口复制的说明:SpelNodeReturn the number of children under this node.- 指定者:
getChildCount在接口中SpelNode- 返回:
- the child count
-
getObjectClass
从接口复制的说明:SpelNodeDetermine 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
nullif the object isnull
-
getStartPosition
public int getStartPosition()从接口复制的说明:SpelNodeReturn the start position of this AST node in the expression string.- 指定者:
getStartPosition在接口中SpelNode- 返回:
- the start position
-
getEndPosition
public int getEndPosition()从接口复制的说明:SpelNodeReturn the end position of this AST node in the expression string.- 指定者:
getEndPosition在接口中SpelNode- 返回:
- the end position
-
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.- 返回:
trueif this node can be compiled to bytecode
-
generateCode
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.- 参数:
mv- the ASM MethodVisitor into which code should be generatedcf- a context object with info about what is on the stack
-
getExitDescriptor
-
getValue
@Nullable protected final <T> T getValue(ExpressionState state, Class<T> desiredReturnType) throws EvaluationException -
getValueRef
-
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.
-