public class Indexer extends SpelNodeImpl
Modifier and Type | Class and Description |
---|---|
private class |
Indexer.ArrayIndexingValueRef |
private class |
Indexer.CollectionIndexingValueRef |
private static class |
Indexer.IndexedType |
private class |
Indexer.MapIndexingValueRef |
private class |
Indexer.PropertyIndexingValueRef |
private class |
Indexer.StringIndexingLValue |
Modifier and Type | Field and Description |
---|---|
private PropertyAccessor |
cachedReadAccessor |
private java.lang.String |
cachedReadName |
private java.lang.Class<?> |
cachedReadTargetType |
private PropertyAccessor |
cachedWriteAccessor |
private java.lang.String |
cachedWriteName |
private java.lang.Class<?> |
cachedWriteTargetType |
private Indexer.IndexedType |
indexedType |
children, exitTypeDescriptor, pos
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM4, ASM5, 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
Constructor and Description |
---|
Indexer(int pos,
SpelNodeImpl expr) |
Modifier and Type | Method and Description |
---|---|
private java.lang.Object |
accessArrayElement(java.lang.Object ctx,
int idx) |
private void |
checkAccess(int arrayLength,
int index) |
void |
generateCode(MethodVisitor mv,
CodeFlow codeflow)
Generate the bytecode for this node into the supplied visitor.
|
TypedValue |
getValueInternal(ExpressionState state) |
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.
|
private void |
setArrayElement(TypeConverter converter,
java.lang.Object ctx,
int idx,
java.lang.Object newValue,
java.lang.Class<?> arrayComponentType) |
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() |
getChild, getChildCount, getEndPosition, getExitDescriptor, getObjectClass, getPreviousChild, getStartPosition, getTypedValue, getValue, getValue, nextChildIs
private java.lang.String cachedReadName
private java.lang.Class<?> cachedReadTargetType
private PropertyAccessor cachedReadAccessor
private java.lang.String cachedWriteName
private java.lang.Class<?> cachedWriteTargetType
private PropertyAccessor cachedWriteAccessor
private Indexer.IndexedType indexedType
public Indexer(int pos, SpelNodeImpl expr)
public TypedValue getValueInternal(ExpressionState state) throws EvaluationException
getValueInternal
in class SpelNodeImpl
EvaluationException
public void setValue(ExpressionState state, 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 expressionState) throws SpelEvaluationException
SpelNode
isWritable
in interface SpelNode
isWritable
in class SpelNodeImpl
expressionState
- the current expression state (includes the context)SpelEvaluationException
protected ValueRef getValueRef(ExpressionState state) throws EvaluationException
getValueRef
in class SpelNodeImpl
EvaluationException
public boolean isCompilable()
SpelNodeImpl
isCompilable
in class SpelNodeImpl
public void generateCode(MethodVisitor mv, CodeFlow codeflow)
SpelNodeImpl
generateCode
in class SpelNodeImpl
mv
- the ASM MethodVisitor into which code should be generatedcodeflow
- a context object with info about what is on the stackpublic java.lang.String toStringAST()
private void setArrayElement(TypeConverter converter, java.lang.Object ctx, int idx, java.lang.Object newValue, java.lang.Class<?> arrayComponentType) throws EvaluationException
EvaluationException
private java.lang.Object accessArrayElement(java.lang.Object ctx, int idx) throws SpelEvaluationException
SpelEvaluationException
private void checkAccess(int arrayLength, int index) throws SpelEvaluationException
SpelEvaluationException