Interface CompilableIndexAccessor
- All Superinterfaces:
IndexAccessor
,Opcodes
,TargetedAccessor
- All Known Implementing Classes:
ReflectiveIndexAccessor
IndexAccessor
is able to generate bytecode that represents
the operation for reading the index, facilitating compilation to bytecode of
expressions that use the accessor.- Since:
- 6.2
- Author:
- Sam Brannen
-
Field Summary
Fields inherited from interface org.springframework.asm.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, 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
-
Method Summary
Modifier and TypeMethodDescriptionvoid
generateCode
(SpelNode indexNode, MethodVisitor methodVisitor, CodeFlow codeFlow) Generate bytecode that performs the operation for reading the index.Class<?>
Get the type of the indexed value.boolean
Determine if thisIndexAccessor
is currently suitable for compilation.Methods inherited from interface org.springframework.expression.IndexAccessor
canRead, canWrite, read, write
Methods inherited from interface org.springframework.expression.TargetedAccessor
getSpecificTargetClasses
-
Method Details
-
isCompilable
boolean isCompilable()Determine if thisIndexAccessor
is currently suitable for compilation.May only be known once the index has been read.
-
getIndexedValueType
Class<?> getIndexedValueType()Get the type of the indexed value.For example, given the expression
book.authors[0]
, the indexed value type represents the result ofauthors[0]
which may be anAuthor
object, aString
representing the author's name, etc.May only be known once the index has been read.
-
generateCode
Generate bytecode that performs the operation for reading the index.Bytecode should be generated into the supplied
MethodVisitor
using context information from theCodeFlow
where necessary.The supplied
indexNode
should be used to generate the appropriate bytecode to load the index onto the stack. For example, given the expressionbook.authors[0]
, invokingcodeFlow.generateCodeForArgument(methodVisitor, indexNode, int.class)
will ensure that the index (0
) is available on the stack as a primitiveint
.Will only be invoked if
isCompilable()
returnstrue
.- Parameters:
indexNode
- theSpelNode
that represents the index being accessedmethodVisitor
- the ASMMethodVisitor
into which code should be generatedcodeFlow
- the current state of the expression compiler
-