public class PropertyOrFieldReference extends SpelNodeImpl
Modifier and Type | Class and Description |
---|---|
private static class |
PropertyOrFieldReference.AccessorLValue |
Modifier and Type | Field and Description |
---|---|
private PropertyAccessor |
cachedReadAccessor |
private PropertyAccessor |
cachedWriteAccessor |
private java.lang.String |
name |
private boolean |
nullSafe |
private java.lang.String |
originalPrimitiveExitTypeDescriptor |
children, exitTypeDescriptor, pos
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, ASM7, 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, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V9
Constructor and Description |
---|
PropertyOrFieldReference(boolean nullSafe,
java.lang.String propertyOrFieldName,
int pos) |
Modifier and Type | Method and Description |
---|---|
void |
generateCode(MethodVisitor mv,
CodeFlow cf)
Generate the bytecode for this node into the supplied visitor.
|
java.lang.String |
getName() |
private java.util.List<PropertyAccessor> |
getPropertyAccessorsToTry(java.lang.Object contextObject,
java.util.List<PropertyAccessor> propertyAccessors)
Determines the set of property resolvers that should be used to try and access a property
on the specified target type.
|
TypedValue |
getValueInternal(ExpressionState state) |
private TypedValue |
getValueInternal(TypedValue contextObject,
EvaluationContext evalContext,
boolean isAutoGrowNullReferences) |
ValueRef |
getValueRef(ExpressionState state) |
boolean |
isCompilable()
Check whether a node can be compiled to bytecode.
|
boolean |
isNullSafe() |
boolean |
isWritable(ExpressionState state)
Determine if this expression node will support a setValue() call.
|
boolean |
isWritableProperty(java.lang.String name,
TypedValue contextObject,
EvaluationContext evalContext) |
private TypedValue |
readProperty(TypedValue contextObject,
EvaluationContext evalContext,
java.lang.String name)
Attempt to read the named property from the current context object.
|
(package private) void |
setExitTypeDescriptor(java.lang.String descriptor) |
void |
setValue(ExpressionState state,
java.lang.Object newValue)
Evaluate the expression to a node and then set the new value on that node.
|
java.lang.String |
toStringAST()
Return the string form the this AST node.
|
private void |
writeProperty(TypedValue contextObject,
EvaluationContext evalContext,
java.lang.String name,
java.lang.Object newValue) |
generateCodeForArgument, generateCodeForArguments, getChild, getChildCount, getEndPosition, getExitDescriptor, getObjectClass, getStartPosition, getTypedValue, getValue, getValue, nextChildIs
private final boolean nullSafe
private final java.lang.String name
@Nullable private java.lang.String originalPrimitiveExitTypeDescriptor
@Nullable private volatile PropertyAccessor cachedReadAccessor
@Nullable private volatile PropertyAccessor cachedWriteAccessor
public PropertyOrFieldReference(boolean nullSafe, java.lang.String propertyOrFieldName, int pos)
public boolean isNullSafe()
public java.lang.String getName()
public ValueRef getValueRef(ExpressionState state) throws EvaluationException
getValueRef
in class SpelNodeImpl
EvaluationException
public TypedValue getValueInternal(ExpressionState state) throws EvaluationException
getValueInternal
in class SpelNodeImpl
EvaluationException
private TypedValue getValueInternal(TypedValue contextObject, EvaluationContext evalContext, boolean isAutoGrowNullReferences) throws EvaluationException
EvaluationException
public void setValue(ExpressionState state, @Nullable java.lang.Object newValue) throws EvaluationException
SpelNode
setValue
in interface SpelNode
setValue
in class SpelNodeImpl
state
- the current expression state (includes the context)newValue
- the new valueEvaluationException
- if any problem occurs evaluating the expression or
setting the new valuepublic boolean isWritable(ExpressionState state) throws EvaluationException
SpelNode
isWritable
in interface SpelNode
isWritable
in class SpelNodeImpl
state
- the current expression state (includes the context)EvaluationException
- if something went wrong trying to determine
if the node supports writingpublic java.lang.String toStringAST()
SpelNode
private TypedValue readProperty(TypedValue contextObject, EvaluationContext evalContext, java.lang.String name) throws EvaluationException
EvaluationException
- if any problem accessing the property or it cannot be foundprivate void writeProperty(TypedValue contextObject, EvaluationContext evalContext, java.lang.String name, @Nullable java.lang.Object newValue) throws EvaluationException
EvaluationException
public boolean isWritableProperty(java.lang.String name, TypedValue contextObject, EvaluationContext evalContext) throws EvaluationException
EvaluationException
private java.util.List<PropertyAccessor> getPropertyAccessorsToTry(@Nullable java.lang.Object contextObject, java.util.List<PropertyAccessor> propertyAccessors)
contextObject
- the object upon which property access is being attemptedpublic boolean isCompilable()
SpelNodeImpl
isCompilable
in class SpelNodeImpl
true
if this node can be compiled to bytecodepublic void generateCode(MethodVisitor mv, CodeFlow cf)
SpelNodeImpl
generateCode
in class SpelNodeImpl
mv
- the ASM MethodVisitor into which code should be generatedcf
- a context object with info about what is on the stackvoid setExitTypeDescriptor(java.lang.String descriptor)