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 SummaryFields 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, V25, V9
- 
Method SummaryModifier and TypeMethodDescriptionvoidgenerateCode(SpelNode indexNode, MethodVisitor methodVisitor, CodeFlow codeFlow) Generate bytecode that performs the operation for reading the index.Class<?> Get the type of the indexed value.booleanDetermine if thisIndexAccessoris currently suitable for compilation.Methods inherited from interface org.springframework.expression.IndexAccessorcanRead, canWrite, read, writeMethods inherited from interface org.springframework.expression.TargetedAccessorgetSpecificTargetClasses
- 
Method Details- 
isCompilableboolean isCompilable()Determine if thisIndexAccessoris currently suitable for compilation.May only be known once the index has been read. - See Also:
 
- 
getIndexedValueTypeClass<?> 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 anAuthorobject, aStringrepresenting the author's name, etc.May only be known once the index has been read. - See Also:
 
- 
generateCodeGenerate bytecode that performs the operation for reading the index.Bytecode should be generated into the supplied MethodVisitorusing context information from theCodeFlowwhere necessary.The supplied indexNodeshould 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- the- SpelNodethat represents the index being accessed
- methodVisitor- the ASM- MethodVisitorinto which code should be generated
- codeFlow- the current state of the expression compiler
 
 
-