public abstract class IndyWrapper extends CodegenReflectionWrapper implements org.objectweb.asm.Opcodes
| Modifier and Type | Field and Description |
|---|---|
static org.objectweb.asm.Handle |
BOOTSTRAP_METHOD |
arguments, field, method, oh, scopeIndex, wrappersguardException, guardsAALOAD, 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| Modifier | Constructor and Description |
|---|---|
protected |
IndyWrapper(ReflectionWrapper rw) |
| Modifier and Type | Method and Description |
|---|---|
static CallSite |
bootstrap(MethodHandles.Lookup caller,
String name,
MethodType type)
This bootstrap method simply points to the lookup method so we can see what is on the stack at runtime
since we need the parameters in order to make a decision.
|
abstract Object |
call(Object[] scopes) |
static IndyWrapper |
create(CodegenReflectionWrapper rw) |
static IndyWrapper |
create(CodegenReflectionWrapper rw,
boolean guard)
We replace a codegenerated reflection based wrapper with one that uses
invoke dynamic.
|
static Class<?> |
defineClass(String name,
byte[] b) |
static String |
encodeClassName(String pkgName,
String name) |
static Object |
lookup(MutableCallSite callSite,
IndyWrapper iw,
Object scope)
This bootstrap method does the actual work of tracking down the CallSite at runtime.
|
guardCallcall, getArguments, getField, getMethod, getWrappers, toString, unwrapequals, getGuards, hashCodeprotected IndyWrapper(ReflectionWrapper rw)
public static CallSite bootstrap(MethodHandles.Lookup caller, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException
caller - the factory for creating method handlesname - the name of the method to calltype - the type of the methodNoSuchMethodExceptionIllegalAccessExceptionpublic abstract Object call(Object[] scopes) throws GuardException
GuardExceptionpublic static IndyWrapper create(CodegenReflectionWrapper rw)
public static IndyWrapper create(CodegenReflectionWrapper rw, boolean guard)
rw - the original code generated wrapperguard - whether to guard the wrapperpublic static Object lookup(MutableCallSite callSite, IndyWrapper iw, Object scope) throws IllegalAccessException, InvocationTargetException
callSite - the callsite that called lookup, this is redirected to the actual field or methodiw - the wrapper around the real call sitescope - the current object scopeIllegalAccessExceptionInvocationTargetExceptionCopyright © 2016. All rights reserved.