Interface CompilableIndexAccessor

All Superinterfaces:
IndexAccessor, org.springframework.asm.Opcodes, TargetedAccessor
All Known Implementing Classes:
ReflectiveIndexAccessor

public interface CompilableIndexAccessor extends IndexAccessor, org.springframework.asm.Opcodes
A compilable 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 Type
    Method
    Description
    void
    generateCode(SpelNode indexNode, org.springframework.asm.MethodVisitor methodVisitor, CodeFlow codeFlow)
    Generate bytecode that performs the operation for reading the index.
    Get the type of the indexed value.
    boolean
    Determine if this IndexAccessor 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 this IndexAccessor is currently suitable for compilation.

      May only be known once the index has been read.

      See Also:
    • 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 of authors[0] which may be an Author object, a String representing the author's name, etc.

      May only be known once the index has been read.

      See Also:
    • generateCode

      void generateCode(SpelNode indexNode, org.springframework.asm.MethodVisitor methodVisitor, CodeFlow codeFlow)
      Generate bytecode that performs the operation for reading the index.

      Bytecode should be generated into the supplied MethodVisitor using context information from the CodeFlow where necessary.

      The supplied indexNode should be used to generate the appropriate bytecode to load the index onto the stack. For example, given the expression book.authors[0], invoking codeFlow.generateCodeForArgument(methodVisitor, indexNode, int.class) will ensure that the index (0) is available on the stack as a primitive int.

      Will only be invoked if isCompilable() returns true.

      Parameters:
      indexNode - the SpelNode that represents the index being accessed
      methodVisitor - the ASM MethodVisitor into which code should be generated
      codeFlow - the current state of the expression compiler