Package com.google.inject.internal.aop
Class FastClass
java.lang.Object
com.google.inject.internal.aop.AbstractGlueGenerator
com.google.inject.internal.aop.FastClass
Generates fast-classes.
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; } }
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final String[]
private final boolean
private static final org.objectweb.asm.Type
private static final String
private static final String
private static final String
private static final String
Fields inherited from class com.google.inject.internal.aop.AbstractGlueGenerator
GENERATED_SOURCE, hostClass, hostName, proxyName, TRAMPOLINE_DESCRIPTOR, TRAMPOLINE_NAME
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
generateConstructorInvoker
(org.objectweb.asm.MethodVisitor mv, Constructor<?> constructor) Generate invoker that takes a context and an argument array and calls the constructor.protected byte[]
generateGlue
(Collection<Executable> members) Generates enhancer/fast-class bytecode for the given constructors/methods.protected void
generateMethodInvoker
(org.objectweb.asm.MethodVisitor mv, Method method) Generate invoker that takes an instance and an argument array and calls the method.protected MethodHandle
lookupInvokerTable
(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.Methods inherited from class com.google.inject.internal.aop.AbstractGlueGenerator
generateTrampoline, glue
-
Field Details
-
FAST_CLASS_API
-
INVOKERS_NAME
- See Also:
-
INVOKERS_DESCRIPTOR
- See Also:
-
INDEX_TO_INVOKER_METHOD_TYPE
private static final org.objectweb.asm.Type INDEX_TO_INVOKER_METHOD_TYPE -
RAW_INVOKER_DESCRIPTOR
- See Also:
-
OBJECT_ARRAY_TYPE
-
hostIsInterface
private final boolean hostIsInterface
-
-
Constructor Details
-
FastClass
FastClass(Class<?> hostClass)
-
-
Method Details
-
generateGlue
Description copied from class:AbstractGlueGenerator
Generates enhancer/fast-class bytecode for the given constructors/methods.- Specified by:
generateGlue
in classAbstractGlueGenerator
-
setupInvokerTable
private void setupInvokerTable(org.objectweb.asm.ClassWriter cw) Generate static initializer to setup invoker table based on the fast-class constructor. -
generateConstructorInvoker
protected void generateConstructorInvoker(org.objectweb.asm.MethodVisitor mv, Constructor<?> constructor) Description copied from class:AbstractGlueGenerator
Generate invoker that takes a context and an argument array and calls the constructor.- Specified by:
generateConstructorInvoker
in classAbstractGlueGenerator
-
generateMethodInvoker
Description copied from class:AbstractGlueGenerator
Generate invoker that takes an instance and an argument array and calls the method.- Specified by:
generateMethodInvoker
in classAbstractGlueGenerator
-
lookupInvokerTable
Description copied from class:AbstractGlueGenerator
Lookup the invoker table; this may be represented by a function or a trampoline.- Specified by:
lookupInvokerTable
in classAbstractGlueGenerator
- Throws:
Throwable
-