类 PropertyOrFieldReference
java.lang.Object
cn.taketoday.expression.spel.ast.SpelNodeImpl
cn.taketoday.expression.spel.ast.PropertyOrFieldReference
Represents a simple property or field reference.
- 从以下版本开始:
- 4.0
- 作者:
- Andy Clement, Juergen Hoeller, Clark Duplichien, Sam Brannen, Harry Yang
-
嵌套类概要
嵌套类 -
字段概要
字段修饰符和类型字段说明private PropertyAccessorprivate PropertyAccessorprivate final Stringprivate final booleanprivate String从类继承的字段 cn.taketoday.expression.spel.ast.SpelNodeImpl
children, exitTypeDescriptor从接口继承的字段 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 -
构造器概要
构造器构造器说明PropertyOrFieldReference(boolean nullSafe, String propertyOrFieldName, int startPos, int endPos) -
方法概要
修饰符和类型方法说明voidgenerateCode(MethodVisitor mv, CodeFlow cf) Generate the bytecode for this node into the supplied visitor.getName()private List<PropertyAccessor>getPropertyAccessorsToTry(Object contextObject, List<PropertyAccessor> propertyAccessors) Determines the set of property resolvers that should be used to try and access a property on the specified target type.getValueInternal(ExpressionState state) private TypedValuegetValueInternal(TypedValue contextObject, EvaluationContext evalContext, boolean isAutoGrowNullReferences) getValueRef(ExpressionState state) booleanCheck whether a node can be compiled to bytecode.booleanbooleanisWritable(ExpressionState state) Determine if this expression node will support a setValue() call.booleanisWritableProperty(String name, TypedValue contextObject, EvaluationContext evalContext) private TypedValuereadProperty(TypedValue contextObject, EvaluationContext evalContext, String name) Attempt to read the named property from the current context object.(专用程序包) voidsetExitTypeDescriptor(String descriptor) setValueInternal(ExpressionState state, Supplier<TypedValue> valueSupplier) Evaluate the expression to a node and then set the new value created by the specifiedSupplieron that node.Return the string form the this AST node.private voidwriteProperty(TypedValue contextObject, EvaluationContext evalContext, String name, Object newValue) 从类继承的方法 cn.taketoday.expression.spel.ast.SpelNodeImpl
generateCodeForArgument, generateCodeForArguments, getChild, getChildCount, getEndPosition, getExitDescriptor, getObjectClass, getStartPosition, getTypedValue, getValue, getValue, nextChildIs, setValue
-
字段详细资料
-
nullSafe
private final boolean nullSafe -
name
-
originalPrimitiveExitTypeDescriptor
-
cachedReadAccessor
-
cachedWriteAccessor
-
-
构造器详细资料
-
PropertyOrFieldReference
public PropertyOrFieldReference(boolean nullSafe, String propertyOrFieldName, int startPos, int endPos)
-
-
方法详细资料
-
isNullSafe
public boolean isNullSafe() -
getName
-
getValueRef
- 覆盖:
getValueRef在类中SpelNodeImpl- 抛出:
EvaluationException
-
getValueInternal
- 指定者:
getValueInternal在类中SpelNodeImpl- 抛出:
EvaluationException
-
getValueInternal
private TypedValue getValueInternal(TypedValue contextObject, EvaluationContext evalContext, boolean isAutoGrowNullReferences) throws EvaluationException -
setValueInternal
public TypedValue setValueInternal(ExpressionState state, Supplier<TypedValue> valueSupplier) throws EvaluationException 从类复制的说明:SpelNodeImplEvaluate 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
SpelNodeImpl.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.- 覆盖:
setValueInternal在类中SpelNodeImpl- 参数:
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
-
isWritable
从接口复制的说明:SpelNodeDetermine if this expression node will support a setValue() call.- 指定者:
isWritable在接口中SpelNode- 覆盖:
isWritable在类中SpelNodeImpl- 参数:
state- 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
-
toStringAST
从接口复制的说明:SpelNodeReturn the string form the this AST node.- 返回:
- the string form
-
readProperty
private TypedValue readProperty(TypedValue contextObject, EvaluationContext evalContext, String name) throws EvaluationException Attempt to read the named property from the current context object.- 返回:
- the value of the property
- 抛出:
EvaluationException- if any problem accessing the property or it cannot be found
-
writeProperty
private void writeProperty(TypedValue contextObject, EvaluationContext evalContext, String name, @Nullable Object newValue) throws EvaluationException -
isWritableProperty
public boolean isWritableProperty(String name, TypedValue contextObject, EvaluationContext evalContext) throws EvaluationException -
getPropertyAccessorsToTry
private List<PropertyAccessor> getPropertyAccessorsToTry(@Nullable Object contextObject, List<PropertyAccessor> propertyAccessors) Determines the set of property resolvers that should be used to try and access a property on the specified target type. The resolvers are considered to be in an ordered list, however in the returned list any that are exact matches for the input target type (as opposed to 'general' resolvers that could work for any type) are placed at the start of the list. In addition, there are specific resolvers that exactly name the class in question and resolvers that name a specific class but it is a supertype of the class we have. These are put at the end of the specific resolvers set and will be tried after exactly matching accessors but before generic accessors.- 参数:
contextObject- the object upon which property access is being attempted- 返回:
- a list of resolvers that should be tried in order to access the property
-
isCompilable
public boolean isCompilable()从类复制的说明:SpelNodeImplCheck 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.- 覆盖:
isCompilable在类中SpelNodeImpl- 返回:
trueif this node can be compiled to bytecode
-
generateCode
从类复制的说明:SpelNodeImplGenerate 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.- 覆盖:
generateCode在类中SpelNodeImpl- 参数:
mv- the ASM MethodVisitor into which code should be generatedcf- a context object with info about what is on the stack
-
setExitTypeDescriptor
-