final class FastClass extends AbstractGlueGenerator
Each fast-class has a single constructor that takes an index. It also has an instance method that takes a context object and an array of argument objects which it combines with the index to call the shared static trampoline. Each fast-class instance therefore acts like a bound invoker to the appropriate constructor or method of the host class.
A handle to the fast-class constructor is used as the invoker table, mapping index to invoker.
Fast-classes have the following pseudo-Java structure:
public final class HostClass$$FastClassByGuice implements BiFunction // each fast-class instance represents a bound invoker { private final int index; // the bound trampoline index public HostClass$$FastClassByGuice(int index) { this.index = index; } public Object apply(Object context, Object args) { return GUICE$TRAMPOLINE(index, context, (Object[]) args); } public static Object GUICE$TRAMPOLINE(int index, Object context, Object[] args) { switch (index) { case 0: { return new HostClass(...); } case 1: { return ((HostClass) context).instanceMethod(...); } case 2: { return HostClass.staticMethod(...); } } return null; } }
Modifier and Type | Field and Description |
---|---|
private static java.lang.String[] |
FAST_CLASS_API |
private boolean |
hostIsInterface |
private static org.objectweb.asm.Type |
INDEX_TO_INVOKER_METHOD_TYPE |
private static java.lang.String |
INVOKERS_DESCRIPTOR |
private static java.lang.String |
INVOKERS_NAME |
private static java.lang.String |
OBJECT_ARRAY_TYPE |
private static java.lang.String |
RAW_INVOKER_DESCRIPTOR |
GENERATED_SOURCE, hostClass, hostName, proxyName, TRAMPOLINE_DESCRIPTOR, TRAMPOLINE_NAME
Constructor and Description |
---|
FastClass(java.lang.Class<?> hostClass) |
Modifier and Type | Method and Description |
---|---|
protected void |
generateConstructorInvoker(org.objectweb.asm.MethodVisitor mv,
java.lang.reflect.Constructor<?> constructor)
Generate invoker that takes a context and an argument array and calls the constructor.
|
protected byte[] |
generateGlue(java.util.Collection<java.lang.reflect.Executable> members)
Generates enhancer/fast-class bytecode for the given constructors/methods.
|
protected void |
generateMethodInvoker(org.objectweb.asm.MethodVisitor mv,
java.lang.reflect.Method method)
Generate invoker that takes an instance and an argument array and calls the method.
|
protected java.lang.invoke.MethodHandle |
lookupInvokerTable(java.lang.Class<?> glueClass)
Lookup the invoker table; this may be represented by a function or a trampoline.
|
private void |
setupInvokerTable(org.objectweb.asm.ClassWriter cw)
Generate static initializer to setup invoker table based on the fast-class constructor.
|
generateTrampoline, glue
private static final java.lang.String[] FAST_CLASS_API
private static final java.lang.String INVOKERS_NAME
private static final java.lang.String INVOKERS_DESCRIPTOR
private static final org.objectweb.asm.Type INDEX_TO_INVOKER_METHOD_TYPE
private static final java.lang.String RAW_INVOKER_DESCRIPTOR
private static final java.lang.String OBJECT_ARRAY_TYPE
private final boolean hostIsInterface
protected byte[] generateGlue(java.util.Collection<java.lang.reflect.Executable> members)
AbstractGlueGenerator
generateGlue
in class AbstractGlueGenerator
private void setupInvokerTable(org.objectweb.asm.ClassWriter cw)
protected void generateConstructorInvoker(org.objectweb.asm.MethodVisitor mv, java.lang.reflect.Constructor<?> constructor)
AbstractGlueGenerator
generateConstructorInvoker
in class AbstractGlueGenerator
protected void generateMethodInvoker(org.objectweb.asm.MethodVisitor mv, java.lang.reflect.Method method)
AbstractGlueGenerator
generateMethodInvoker
in class AbstractGlueGenerator
protected java.lang.invoke.MethodHandle lookupInvokerTable(java.lang.Class<?> glueClass) throws java.lang.Throwable
AbstractGlueGenerator
lookupInvokerTable
in class AbstractGlueGenerator
java.lang.Throwable