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, wrappers
guardException, guards
AALOAD, 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.
|
guardCall
call, getArguments, getField, getMethod, getWrappers, toString, unwrap
equals, getGuards, hashCode
protected 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 methodNoSuchMethodException
IllegalAccessException
public abstract Object call(Object[] scopes) throws GuardException
GuardException
public 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 scopeIllegalAccessException
InvocationTargetException
Copyright © 2016. All rights reserved.