Class SpelNodeImpl
- Direct Known Subclasses:
- Assign,- BeanReference,- CompoundExpression,- ConstructorReference,- Elvis,- FunctionReference,- Identifier,- Indexer,- InlineList,- InlineMap,- Literal,- MethodReference,- Operator,- OperatorNot,- Projection,- PropertyOrFieldReference,- QualifiedIdentifier,- Selection,- Ternary,- TypeReference,- VariableReference
- Since:
- 3.0
- Author:
- Andy Clement, Juergen Hoeller, Sam Brannen
- 
Field SummaryFieldsModifier and TypeFieldDescriptionprotected SpelNodeImpl[]Indicates the type descriptor for the result of this expression node.Fields inherited from interface org.springframework.asm.OpcodesAALOAD, 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, V24, V9
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionprotected static voidgenerateCodeForArgument(MethodVisitor mv, CodeFlow cf, SpelNodeImpl argument, String paramDesc) Deprecated.protected static voidgenerateCodeForArguments(MethodVisitor mv, CodeFlow cf, Executable executable, SpelNodeImpl[] arguments) Generate code that handles building the argument values for the specifiedExecutable(method or constructor).protected static voidgenerateCodeForArguments(MethodVisitor mv, CodeFlow cf, Member member, SpelNodeImpl[] arguments) Deprecated.as of 6.2, in favor ofgenerateCodeForArguments(MethodVisitor, CodeFlow, Executable, SpelNodeImpl[])getChild(int index) Return the nth child under this node.intReturn the number of children under this node.intReturn the end position of this AST node in the expression string.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.getValue(ExpressionState expressionState) Evaluate the expression node in the context of the supplied expression state and return the value.protected final <T> @Nullable TgetValue(ExpressionState state, Class<T> desiredReturnType) abstract TypedValuegetValueInternal(ExpressionState expressionState) protected ValueRefgetValueRef(ExpressionState state) booleanDetermine if this node is the target of a null-safe navigation operation.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, @Nullable Object newValue) Evaluate the expression to a node and then set the new value on that node.setValueInternal(ExpressionState expressionState, Supplier<TypedValue> valueSupplier) Evaluate the expression to a node and then set the new value created by the specifiedSupplieron that node.Methods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.expression.spel.SpelNodegenerateCode, isCompilable, toStringAST
- 
Field Details- 
children
- 
exitTypeDescriptorIndicates 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 
 
- 
- 
Constructor Details- 
SpelNodeImpl
 
- 
- 
Method Details- 
nextChildIsReturntrueif the next child is one of the specified classes.
- 
getValueDescription copied from interface:SpelNodeEvaluate the expression node in the context of the supplied expression state and return the value.- Specified by:
- getValuein interface- SpelNode
- Parameters:
- expressionState- the current expression state (includes the context)
- Returns:
- the value of this node evaluated against the specified state
- Throws:
- EvaluationException- if any problem occurs evaluating the expression
 
- 
getTypedValueDescription copied from interface:SpelNodeEvaluate the expression node in the context of the supplied expression state and return the typed value.- Specified by:
- getTypedValuein interface- SpelNode
- Parameters:
- expressionState- the current expression state (includes the context)
- Returns:
- the typed value of this node evaluated against the specified state
- Throws:
- EvaluationException- if any problem occurs evaluating the expression
 
- 
isWritableDescription copied from interface:SpelNodeDetermine if this expression node will support a setValue() call.- Specified by:
- isWritablein interface- SpelNode
- Parameters:
- expressionState- the current expression state (includes the context)
- Returns:
- true if the expression node will allow setValue()
- Throws:
- EvaluationException- if something went wrong trying to determine if the node supports writing
 
- 
setValuepublic void setValue(ExpressionState expressionState, @Nullable Object newValue) throws EvaluationException Description copied from interface: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.- Specified by:
- setValuein interface- SpelNode
- Parameters:
- expressionState- the current expression state (includes the context)
- newValue- the new value
- Throws:
- EvaluationException- if any problem occurs evaluating the expression or setting the new value
 
- 
setValueInternalpublic TypedValue setValueInternal(ExpressionState expressionState, 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.- Parameters:
- expressionState- the current expression state (includes the context)
- valueSupplier- a supplier of the new value
- Throws:
- EvaluationException- if any problem occurs evaluating the expression or setting the new value
- Since:
- 5.2.24
 
- 
getChildDescription copied from interface:SpelNodeReturn the nth child under this node.
- 
getChildCountpublic int getChildCount()Description copied from interface:SpelNodeReturn the number of children under this node.- Specified by:
- getChildCountin interface- SpelNode
- Returns:
- the child count
- See Also:
 
- 
getObjectClassDescription copied from interface:SpelNodeDetermine the class of the object passed in, unless it is already a class object.- Specified by:
- getObjectClassin interface- SpelNode
- Parameters:
- obj- the object that the caller wants the class of
- Returns:
- the class of the object if it is not already a class object,
 or nullif the object isnull
 
- 
getStartPositionpublic int getStartPosition()Description copied from interface:SpelNodeReturn the start position of this AST node in the expression string.- Specified by:
- getStartPositionin interface- SpelNode
- Returns:
- the start position
 
- 
getEndPositionpublic int getEndPosition()Description copied from interface:SpelNodeReturn the end position of this AST node in the expression string.- Specified by:
- getEndPositionin interface- SpelNode
- Returns:
- the end position
 
- 
isNullSafepublic boolean isNullSafe()Determine if this node is the target of a null-safe navigation operation.The default implementation returns false.- Returns:
- trueif this node is the target of a null-safe operation
- Since:
- 6.1.6
 
- 
getExitDescriptor
- 
getValueprotected final <T> @Nullable T getValue(ExpressionState state, Class<T> desiredReturnType) throws EvaluationException - Throws:
- EvaluationException
 
- 
getValueRef- Throws:
- EvaluationException
 
- 
getValueInternalpublic abstract TypedValue getValueInternal(ExpressionState expressionState) throws EvaluationException - Throws:
- EvaluationException
 
- 
generateCodeForArguments@Deprecated(since="6.2") protected static void generateCodeForArguments(MethodVisitor mv, CodeFlow cf, Member member, SpelNodeImpl[] arguments) Deprecated.as of 6.2, in favor ofgenerateCodeForArguments(MethodVisitor, CodeFlow, Executable, SpelNodeImpl[])Generate code that handles building the argument values for the specifiedMember(method or constructor).This method takes into account whether the method or constructor was declared to accept varargs, and if it was then the argument values will be appropriately packaged into an array. - Parameters:
- mv- the method visitor where code should be generated
- cf- the current- CodeFlow
- member- the method or constructor for which arguments are being set up
- arguments- the expression nodes for the expression supplied argument values
 
- 
generateCodeForArgumentsprotected static void generateCodeForArguments(MethodVisitor mv, CodeFlow cf, Executable executable, SpelNodeImpl[] arguments) Generate code that handles building the argument values for the specifiedExecutable(method or constructor).This method takes into account whether the method or constructor was declared to accept varargs, and if it was then the argument values will be appropriately packaged into an array. - Parameters:
- mv- the method visitor where code should be generated
- cf- the current- CodeFlow
- executable- the- Executable(method or constructor) for which arguments are being set up
- arguments- the expression nodes for the expression supplied argument values
- Since:
- 6.2
 
- 
generateCodeForArgument@Deprecated(since="6.2") protected static void generateCodeForArgument(MethodVisitor mv, CodeFlow cf, SpelNodeImpl argument, String paramDesc) Deprecated.as of 6.2, in favor ofCodeFlow.generateCodeForArgument(MethodVisitor, SpelNode, String)Generate bytecode that loads the supplied argument onto the stack.This method also performs any boxing, unboxing, or check-casting necessary to ensure that the type of the argument on the stack matches the supplied paramDesc.
 
- 
CodeFlow.generateCodeForArgument(MethodVisitor, SpelNode, String)