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 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, V25, V9 -
Method Summary
Modifier 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 IndexAccessor
canRead, canWrite, read, writeMethods inherited from interface TargetedAccessor
getSpecificTargetClasses
-
Method Details
-
isCompilable
boolean isCompilable()Determine if thisIndexAccessoris 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 ofauthors[0]which may be anAuthorobject, aStringrepresenting the author's name, etc.May only be known once the index has been read.
- See Also:
-
generateCode
Generate 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- theSpelNodethat represents the index being accessedmethodVisitor- the ASMMethodVisitorinto which code should be generatedcodeFlow- the current state of the expression compiler
-