Class FastClass


  • final class FastClass
    extends AbstractGlueGenerator
    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 Detail

      • FAST_CLASS_API

        private static final java.lang.String[] FAST_CLASS_API
      • INVOKERS_DESCRIPTOR

        private static final java.lang.String INVOKERS_DESCRIPTOR
        See Also:
        Constant Field Values
      • INDEX_TO_INVOKER_METHOD_TYPE

        private static final org.objectweb.asm.Type INDEX_TO_INVOKER_METHOD_TYPE
      • RAW_INVOKER_DESCRIPTOR

        private static final java.lang.String RAW_INVOKER_DESCRIPTOR
        See Also:
        Constant Field Values
      • OBJECT_ARRAY_TYPE

        private static final java.lang.String OBJECT_ARRAY_TYPE
      • hostIsInterface

        private final boolean hostIsInterface
    • Constructor Detail

      • FastClass

        FastClass​(java.lang.Class<?> hostClass)
    • Method Detail

      • generateGlue

        protected byte[] generateGlue​(java.util.Collection<java.lang.reflect.Executable> members)
        Description copied from class: AbstractGlueGenerator
        Generates enhancer/fast-class bytecode for the given constructors/methods.
        Specified by:
        generateGlue in class AbstractGlueGenerator
      • 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,
                                                  java.lang.reflect.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 class AbstractGlueGenerator
      • generateMethodInvoker

        protected void generateMethodInvoker​(org.objectweb.asm.MethodVisitor mv,
                                             java.lang.reflect.Method method)
        Description copied from class: AbstractGlueGenerator
        Generate invoker that takes an instance and an argument array and calls the method.
        Specified by:
        generateMethodInvoker in class AbstractGlueGenerator
      • lookupInvokerTable

        protected java.lang.invoke.MethodHandle lookupInvokerTable​(java.lang.Class<?> glueClass)
                                                            throws java.lang.Throwable
        Description copied from class: AbstractGlueGenerator
        Lookup the invoker table; this may be represented by a function or a trampoline.
        Specified by:
        lookupInvokerTable in class AbstractGlueGenerator
        Throws:
        java.lang.Throwable