public class org.jruby.java.proxies.JavaInterfaceTemplate
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.java.proxies.JavaInterfaceTemplate
  super_class: java.lang.Object
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.java.proxies.JavaInterfaceTemplate this
         0: .line 34
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.jruby.java.proxies.JavaInterfaceTemplate this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/java/proxies/JavaInterfaceTemplate;

  public static org.jruby.RubyModule createJavaInterfaceTemplateModule(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/RubyModule;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=1
        start local 0 // org.jruby.runtime.ThreadContext context
         0: .line 37
            aload 0 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            astore 1 /* runtime */
        start local 1 // org.jruby.Ruby runtime
         1: .line 38
            aload 1 /* runtime */
            ldc "JavaInterfaceTemplate"
            invokevirtual org.jruby.Ruby.defineModule:(Ljava/lang/String;)Lorg/jruby/RubyModule;
            astore 2 /* JavaInterfaceTemplate */
        start local 2 // org.jruby.RubyModule JavaInterfaceTemplate
         2: .line 40
            aload 2 /* JavaInterfaceTemplate */
            invokevirtual org.jruby.RubyModule.getSingletonClass:()Lorg/jruby/RubyClass;
            astore 3 /* singleton */
        start local 3 // org.jruby.RubyClass singleton
         3: .line 41
            aload 3 /* singleton */
            aload 0 /* context */
            ldc "java_class"
            invokevirtual org.jruby.RubyClass.addReadAttribute:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)V
         4: .line 42
            aload 3 /* singleton */
            ldc Lorg/jruby/java/proxies/JavaInterfaceTemplate;
            invokevirtual org.jruby.RubyClass.defineAnnotatedMethods:(Ljava/lang/Class;)V
         5: .line 44
            aload 2 /* JavaInterfaceTemplate */
            ldc Lorg/jruby/java/proxies/JavaProxy$ClassMethods;
            invokevirtual org.jruby.RubyModule.defineAnnotatedMethods:(Ljava/lang/Class;)V
         6: .line 46
            aload 2 /* JavaInterfaceTemplate */
            areturn
        end local 3 // org.jruby.RubyClass singleton
        end local 2 // org.jruby.RubyModule JavaInterfaceTemplate
        end local 1 // org.jruby.Ruby runtime
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0    7     0                context  Lorg/jruby/runtime/ThreadContext;
            1    7     1                runtime  Lorg/jruby/Ruby;
            2    7     2  JavaInterfaceTemplate  Lorg/jruby/RubyModule;
            3    7     3              singleton  Lorg/jruby/RubyClass;
    MethodParameters:
         Name  Flags
      context  

  public static org.jruby.runtime.builtin.IRubyObject implement(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=10, args_size=3
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // org.jruby.runtime.builtin.IRubyObject self
        start local 2 // org.jruby.runtime.builtin.IRubyObject clazz
         0: .line 56
            aload 2 /* clazz */
            instanceof org.jruby.RubyModule
            ifne 3
         1: .line 57
            aload 0 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            astore 3 /* runtime */
        start local 3 // org.jruby.Ruby runtime
         2: .line 58
            aload 3 /* runtime */
            aload 2 /* clazz */
            aload 3 /* runtime */
            invokevirtual org.jruby.Ruby.getModule:()Lorg/jruby/RubyClass;
            invokevirtual org.jruby.Ruby.newTypeError:(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyClass;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 3 // org.jruby.Ruby runtime
         3: .line 61
      StackMap locals:
      StackMap stack:
            aload 2 /* clazz */
            checkcast org.jruby.RubyModule
            astore 3 /* targetModule */
        start local 3 // org.jruby.RubyModule targetModule
         4: .line 62
            aload 1 /* self */
            invokestatic org.jruby.java.proxies.JavaInterfaceTemplate.getJavaClassForInterface:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/javasupport/JavaClass;
            astore 4 /* javaClass */
        start local 4 // org.jruby.javasupport.JavaClass javaClass
         5: .line 64
            aload 4 /* javaClass */
            invokevirtual org.jruby.javasupport.JavaClass.javaClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getMethods:()[Ljava/lang/reflect/Method;
            astore 5 /* javaInstanceMethods */
        start local 5 // java.lang.reflect.Method[] javaInstanceMethods
         6: .line 65
            new org.jruby.java.proxies.JavaInterfaceTemplate$DummyMethodImpl
            dup
            aload 3 /* targetModule */
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$DummyMethodImpl.<init>:(Lorg/jruby/RubyModule;)V
            astore 6 /* dummyMethodImpl */
        start local 6 // org.jruby.internal.runtime.methods.DynamicMethod dummyMethodImpl
         7: .line 67
            iconst_0
            istore 7 /* i */
        start local 7 // int i
         8: goto 14
         9: .line 68
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject org.jruby.RubyModule org.jruby.javasupport.JavaClass java.lang.reflect.Method[] org.jruby.internal.runtime.methods.DynamicMethod int
      StackMap stack:
            aload 5 /* javaInstanceMethods */
            iload 7 /* i */
            aaload
            astore 8 /* javaMethod */
        start local 8 // java.lang.reflect.Method javaMethod
        10: .line 69
            aload 8 /* javaMethod */
            invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
            astore 9 /* name */
        start local 9 // java.lang.String name
        11: .line 70
            aload 3 /* targetModule */
            aload 9 /* name */
            invokevirtual org.jruby.RubyModule.searchMethod:(Ljava/lang/String;)Lorg/jruby/internal/runtime/methods/DynamicMethod;
            invokevirtual org.jruby.internal.runtime.methods.DynamicMethod.isUndefined:()Z
            ifeq 13
        12: .line 71
            aload 3 /* targetModule */
            aload 9 /* name */
            aload 6 /* dummyMethodImpl */
            invokevirtual org.jruby.RubyModule.addMethod:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        end local 9 // java.lang.String name
        end local 8 // java.lang.reflect.Method javaMethod
        13: .line 67
      StackMap locals:
      StackMap stack:
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        14: iload 7 /* i */
            aload 5 /* javaInstanceMethods */
            arraylength
            if_icmplt 9
        end local 7 // int i
        15: .line 75
            aload 0 /* context */
            getfield org.jruby.runtime.ThreadContext.nil:Lorg/jruby/runtime/builtin/IRubyObject;
            areturn
        end local 6 // org.jruby.internal.runtime.methods.DynamicMethod dummyMethodImpl
        end local 5 // java.lang.reflect.Method[] javaInstanceMethods
        end local 4 // org.jruby.javasupport.JavaClass javaClass
        end local 3 // org.jruby.RubyModule targetModule
        end local 2 // org.jruby.runtime.builtin.IRubyObject clazz
        end local 1 // org.jruby.runtime.builtin.IRubyObject self
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   16     0              context  Lorg/jruby/runtime/ThreadContext;
            0   16     1                 self  Lorg/jruby/runtime/builtin/IRubyObject;
            0   16     2                clazz  Lorg/jruby/runtime/builtin/IRubyObject;
            2    3     3              runtime  Lorg/jruby/Ruby;
            4   16     3         targetModule  Lorg/jruby/RubyModule;
            5   16     4            javaClass  Lorg/jruby/javasupport/JavaClass;
            6   16     5  javaInstanceMethods  [Ljava/lang/reflect/Method;
            7   16     6      dummyMethodImpl  Lorg/jruby/internal/runtime/methods/DynamicMethod;
            8   15     7                    i  I
           10   13     8           javaMethod  Ljava/lang/reflect/Method;
           11   13     9                 name  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
      org.jruby.anno.JRubyMethod(visibility = org.jruby.runtime.Visibility.PRIVATE:Lorg/jruby/runtime/Visibility;)
    MethodParameters:
         Name  Flags
      context  
      self     
      clazz    

  public static org.jruby.runtime.builtin.IRubyObject append_features(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.Block);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // org.jruby.runtime.builtin.IRubyObject self
        start local 2 // org.jruby.runtime.builtin.IRubyObject clazz
        start local 3 // org.jruby.runtime.Block block
         0: .line 93
            aload 2 /* clazz */
            instanceof org.jruby.RubyClass
            ifeq 3
         1: .line 94
            aload 0 /* context */
            aload 1 /* self */
            aload 2 /* clazz */
            checkcast org.jruby.RubyClass
            invokestatic org.jruby.java.proxies.JavaInterfaceTemplate.appendFeaturesToClass:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyClass;)V
         2: .line 95
            goto 7
         3: .line 96
      StackMap locals:
      StackMap stack:
            aload 2 /* clazz */
            instanceof org.jruby.RubyModule
            ifeq 6
         4: .line 97
            aload 0 /* context */
            aload 1 /* self */
            aload 2 /* clazz */
            checkcast org.jruby.RubyModule
            invokestatic org.jruby.java.proxies.JavaInterfaceTemplate.appendFeaturesToModule:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyModule;)V
         5: .line 98
            goto 7
         6: .line 100
      StackMap locals:
      StackMap stack:
            aload 0 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            new java.lang.StringBuilder
            dup
            ldc "received "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* clazz */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc ", expected Class/Module"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual org.jruby.Ruby.newTypeError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
         7: .line 103
      StackMap locals:
      StackMap stack:
            aload 0 /* context */
            aload 1 /* self */
            aload 2 /* clazz */
            aload 3 /* block */
            invokestatic org.jruby.runtime.Helpers.invokeSuper:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;)Lorg/jruby/runtime/builtin/IRubyObject;
            areturn
        end local 3 // org.jruby.runtime.Block block
        end local 2 // org.jruby.runtime.builtin.IRubyObject clazz
        end local 1 // org.jruby.runtime.builtin.IRubyObject self
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0  context  Lorg/jruby/runtime/ThreadContext;
            0    8     1     self  Lorg/jruby/runtime/builtin/IRubyObject;
            0    8     2    clazz  Lorg/jruby/runtime/builtin/IRubyObject;
            0    8     3    block  Lorg/jruby/runtime/Block;
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(frame = true)
    MethodParameters:
         Name  Flags
      context  
      self     
      clazz    
      block    

  private static void appendFeaturesToClass(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject, org.jruby.RubyClass);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyClass;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // org.jruby.runtime.builtin.IRubyObject self
        start local 2 // org.jruby.RubyClass clazz
         0: .line 107
            aload 0 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            astore 3 /* runtime */
        start local 3 // org.jruby.Ruby runtime
         1: .line 108
            aload 2 /* clazz */
            aload 3 /* runtime */
            invokestatic org.jruby.java.proxies.JavaInterfaceTemplate.checkAlreadyReified:(Lorg/jruby/RubyClass;Lorg/jruby/Ruby;)V
         2: .line 110
            aload 1 /* self */
            invokestatic org.jruby.java.proxies.JavaInterfaceTemplate.getJavaClassForInterface:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/javasupport/JavaClass;
            astore 4 /* javaClass */
        start local 4 // org.jruby.javasupport.JavaClass javaClass
         3: .line 112
            aload 2 /* clazz */
            ldc "@java_interfaces"
            invokevirtual org.jruby.RubyClass.hasInstanceVariable:(Ljava/lang/String;)Z
            ifne 8
         4: .line 113
            aload 3 /* runtime */
            aload 4 /* javaClass */
            invokestatic org.jruby.RubyArray.newArray:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            astore 5 /* javaInterfaces */
        start local 5 // org.jruby.RubyArray javaInterfaces
         5: .line 114
            aload 2 /* clazz */
            ldc "@java_interfaces"
            aload 5 /* javaInterfaces */
            invokevirtual org.jruby.RubyClass.setInstanceVariable:(Ljava/lang/String;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            pop
         6: .line 116
            aload 0 /* context */
            aload 2 /* clazz */
            invokestatic org.jruby.java.proxies.JavaInterfaceTemplate.initInterfaceImplMethods:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/RubyClass;)V
         7: .line 117
            goto 11
        end local 5 // org.jruby.RubyArray javaInterfaces
         8: .line 119
      StackMap locals: org.jruby.Ruby org.jruby.javasupport.JavaClass
      StackMap stack:
            aload 2 /* clazz */
            ldc "@java_interfaces"
            invokevirtual org.jruby.RubyClass.getInstanceVariable:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyArray
            astore 5 /* javaInterfaces */
        start local 5 // org.jruby.RubyArray javaInterfaces
         9: .line 123
            aload 5 /* javaInterfaces */
            invokevirtual org.jruby.RubyArray.isFrozen:()Z
            ifne 11
            aload 5 /* javaInterfaces */
            aload 0 /* context */
            aload 4 /* javaClass */
            invokevirtual org.jruby.RubyArray.includes:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Z
            ifne 11
        10: .line 124
            aload 5 /* javaInterfaces */
            aload 4 /* javaClass */
            invokevirtual org.jruby.RubyArray.append:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        11: .line 127
      StackMap locals: org.jruby.RubyArray
      StackMap stack:
            return
        end local 5 // org.jruby.RubyArray javaInterfaces
        end local 4 // org.jruby.javasupport.JavaClass javaClass
        end local 3 // org.jruby.Ruby runtime
        end local 2 // org.jruby.RubyClass clazz
        end local 1 // org.jruby.runtime.builtin.IRubyObject self
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   12     0         context  Lorg/jruby/runtime/ThreadContext;
            0   12     1            self  Lorg/jruby/runtime/builtin/IRubyObject;
            0   12     2           clazz  Lorg/jruby/RubyClass;
            1   12     3         runtime  Lorg/jruby/Ruby;
            3   12     4       javaClass  Lorg/jruby/javasupport/JavaClass;
            5    8     5  javaInterfaces  Lorg/jruby/RubyArray;
            9   12     5  javaInterfaces  Lorg/jruby/RubyArray;
    MethodParameters:
         Name  Flags
      context  
      self     final
      clazz    final

  private static void checkAlreadyReified(org.jruby.RubyClass, org.jruby.Ruby);
    descriptor: (Lorg/jruby/RubyClass;Lorg/jruby/Ruby;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.jruby.RubyClass clazz
        start local 1 // org.jruby.Ruby runtime
         0: .line 133
            getstatic org.jruby.javasupport.Java.NEW_STYLE_EXTENSION:Z
            ifeq 1
            aload 0 /* clazz */
            invokevirtual org.jruby.RubyClass.getReifiedClass:()Ljava/lang/Class;
            ifnonnull 6
         1: .line 135
      StackMap locals:
      StackMap stack:
            aload 0 /* clazz */
            ldc "@java_class"
            invokevirtual org.jruby.RubyClass.hasInstanceVariable:(Ljava/lang/String;)Z
            ifeq 4
         2: .line 136
            aload 0 /* clazz */
            ldc "@java_class"
            invokevirtual org.jruby.RubyClass.getInstanceVariable:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isTrue:()Z
            ifeq 4
         3: .line 137
            aload 0 /* clazz */
            invokevirtual org.jruby.RubyClass.getSingletonClass:()Lorg/jruby/RubyClass;
            ldc "java_proxy_class"
            iconst_0
            invokevirtual org.jruby.RubyClass.isMethodBound:(Ljava/lang/String;Z)Z
            ifeq 6
         4: .line 139
      StackMap locals:
      StackMap stack:
            aload 0 /* clazz */
            ldc "@java_proxy_class"
            invokevirtual org.jruby.RubyClass.hasInstanceVariable:(Ljava/lang/String;)Z
            ifeq 7
         5: .line 140
            aload 0 /* clazz */
            ldc "@java_proxy_class"
            invokevirtual org.jruby.RubyClass.getInstanceVariable:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isTrue:()Z
            ifeq 7
         6: .line 141
      StackMap locals:
      StackMap stack:
            aload 1 /* runtime */
            ldc "can not add Java interface to existing Java class"
            invokevirtual org.jruby.Ruby.newArgumentError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
         7: .line 143
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.jruby.Ruby runtime
        end local 0 // org.jruby.RubyClass clazz
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0    clazz  Lorg/jruby/RubyClass;
            0    8     1  runtime  Lorg/jruby/Ruby;
    Exceptions:
      throws org.jruby.exceptions.RaiseException
    MethodParameters:
         Name  Flags
      clazz    final
      runtime  

  private static void initInterfaceImplMethods(org.jruby.runtime.ThreadContext, org.jruby.RubyClass);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/RubyClass;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=4, args_size=2
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // org.jruby.RubyClass clazz
         0: .line 148
            aload 1 /* clazz */
            ldc "__jcreate!"
            iconst_0
            invokevirtual org.jruby.RubyClass.isMethodBound:(Ljava/lang/String;Z)Z
            ifne 12
            aload 1 /* clazz */
            ldc "__jcreate_meta!"
            iconst_0
            invokevirtual org.jruby.RubyClass.isMethodBound:(Ljava/lang/String;Z)Z
            ifne 12
         1: .line 152
            aload 1 /* clazz */
            invokevirtual org.jruby.RubyClass.getSingletonClass:()Lorg/jruby/RubyClass;
            astore 2 /* singleton */
        start local 2 // org.jruby.RubyClass singleton
         2: .line 155
            aload 2 /* singleton */
            aload 0 /* context */
            ldc "java_interfaces"
            invokevirtual org.jruby.RubyClass.addReadAttribute:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)V
         3: .line 157
            getstatic org.jruby.javasupport.Java.NEW_STYLE_EXTENSION:Z
            ifne 4
            aload 1 /* clazz */
            invokevirtual org.jruby.RubyClass.getSuperClass:()Lorg/jruby/RubyClass;
            invokevirtual org.jruby.RubyClass.getRealClass:()Lorg/jruby/RubyClass;
            ldc "@java_class"
            invokevirtual org.jruby.RubyClass.hasInstanceVariable:(Ljava/lang/String;)Z
            ifne 5
         4: .line 158
      StackMap locals: org.jruby.RubyClass
      StackMap stack:
            getstatic org.jruby.RubyInstanceConfig.INTERFACES_USE_PROXY:Z
            ifeq 9
         5: .line 163
      StackMap locals:
      StackMap stack:
            aload 1 /* clazz */
            invokevirtual org.jruby.RubyClass.getAllocator:()Lorg/jruby/runtime/ObjectAllocator;
            astore 3 /* proxyAllocator */
        start local 3 // org.jruby.runtime.ObjectAllocator proxyAllocator
         6: .line 164
            aload 1 /* clazz */
            new org.jruby.java.proxies.JavaInterfaceTemplate$1
            dup
            aload 3 /* proxyAllocator */
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$1.<init>:(Lorg/jruby/runtime/ObjectAllocator;)V
            invokevirtual org.jruby.RubyClass.setAllocator:(Lorg/jruby/runtime/ObjectAllocator;)V
         7: .line 174
            aload 1 /* clazz */
            ldc "__jcreate!"
            new org.jruby.java.proxies.JavaInterfaceTemplate$InterfaceProxyFactory
            dup
            aload 1 /* clazz */
            ldc "__jcreate!"
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$InterfaceProxyFactory.<init>:(Lorg/jruby/RubyClass;Ljava/lang/String;)V
            invokevirtual org.jruby.RubyClass.addMethod:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        end local 3 // org.jruby.runtime.ObjectAllocator proxyAllocator
         8: .line 175
            goto 10
         9: .line 178
      StackMap locals:
      StackMap stack:
            aload 1 /* clazz */
            invokestatic org.jruby.java.proxies.JavaInterfaceTemplate.addRealImplClassNew:(Lorg/jruby/RubyClass;)V
        10: .line 186
      StackMap locals:
      StackMap stack:
            aload 1 /* clazz */
            ldc "__jcreate_meta!"
            new org.jruby.java.proxies.JavaInterfaceTemplate$InterfaceProxyFactory
            dup
            aload 1 /* clazz */
            ldc "__jcreate_meta!"
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$InterfaceProxyFactory.<init>:(Lorg/jruby/RubyClass;Ljava/lang/String;)V
            invokevirtual org.jruby.RubyClass.addMethod:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        11: .line 189
            aload 1 /* clazz */
            ldc "java_class"
            new org.jruby.java.proxies.JavaInterfaceTemplate$JavaClassAccessor
            dup
            aload 1 /* clazz */
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$JavaClassAccessor.<init>:(Lorg/jruby/RubyClass;)V
            invokevirtual org.jruby.RubyClass.addMethod:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        end local 2 // org.jruby.RubyClass singleton
        12: .line 193
      StackMap locals:
      StackMap stack:
            aload 1 /* clazz */
            ldc "implement"
            iconst_0
            invokevirtual org.jruby.RubyClass.isMethodBound:(Ljava/lang/String;Z)Z
            ifne 16
        13: .line 194
            aload 1 /* clazz */
            invokevirtual org.jruby.RubyClass.getSingletonClass:()Lorg/jruby/RubyClass;
            astore 2 /* singleton */
        start local 2 // org.jruby.RubyClass singleton
        14: .line 198
            aload 2 /* singleton */
            ldc "implement"
            new org.jruby.java.proxies.JavaInterfaceTemplate$2
            dup
            aload 1 /* clazz */
            getstatic org.jruby.runtime.Visibility.PRIVATE:Lorg/jruby/runtime/Visibility;
            ldc "implement"
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$2.<init>:(Lorg/jruby/RubyModule;Lorg/jruby/runtime/Visibility;Ljava/lang/String;)V
            invokevirtual org.jruby.RubyClass.addMethod:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        15: .line 211
            aload 2 /* singleton */
            ldc "implement_all"
            new org.jruby.java.proxies.JavaInterfaceTemplate$3
            dup
            aload 1 /* clazz */
            getstatic org.jruby.runtime.Visibility.PRIVATE:Lorg/jruby/runtime/Visibility;
            ldc "implement_all"
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$3.<init>:(Lorg/jruby/RubyModule;Lorg/jruby/runtime/Visibility;Ljava/lang/String;)V
            invokevirtual org.jruby.RubyClass.addMethod:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        end local 2 // org.jruby.RubyClass singleton
        16: .line 225
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.jruby.RubyClass clazz
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   17     0         context  Lorg/jruby/runtime/ThreadContext;
            0   17     1           clazz  Lorg/jruby/RubyClass;
            2   12     2       singleton  Lorg/jruby/RubyClass;
            6    8     3  proxyAllocator  Lorg/jruby/runtime/ObjectAllocator;
           14   16     2       singleton  Lorg/jruby/RubyClass;
    MethodParameters:
         Name  Flags
      context  
      clazz    final

  public static void addRealImplClassNew(org.jruby.RubyClass);
    descriptor: (Lorg/jruby/RubyClass;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.jruby.RubyClass clazz
         0: .line 263
            aload 0 /* clazz */
            new org.jruby.java.proxies.JavaInterfaceTemplate$4
            dup
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$4.<init>:()V
            invokevirtual org.jruby.RubyClass.setAllocator:(Lorg/jruby/runtime/ObjectAllocator;)V
         1: .line 280
            return
        end local 0 // org.jruby.RubyClass clazz
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    2     0  clazz  Lorg/jruby/RubyClass;
    MethodParameters:
       Name  Flags
      clazz  final

  private static org.jruby.runtime.builtin.IRubyObject newInterfaceProxy(org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // org.jruby.runtime.builtin.IRubyObject self
         0: .line 283
            aload 0 /* self */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getMetaClass:()Lorg/jruby/RubyClass;
            astore 1 /* current */
        start local 1 // org.jruby.RubyClass current
         1: .line 285
            aload 0 /* self */
            aload 1 /* current */
            invokestatic org.jruby.javasupport.Java.getInterfacesFromRubyClass:(Lorg/jruby/RubyClass;)[Ljava/lang/Class;
            invokestatic org.jruby.javasupport.Java.newInterfaceImpl:(Lorg/jruby/runtime/builtin/IRubyObject;[Ljava/lang/Class;)Lorg/jruby/javasupport/JavaObject;
            astore 2 /* newObject */
        start local 2 // org.jruby.javasupport.JavaObject newObject
         2: .line 286
            aload 0 /* self */
            aload 0 /* self */
            aload 2 /* newObject */
            invokestatic org.jruby.javasupport.JavaUtilities.set_java_object:(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            pop
         3: .line 287
            aload 2 /* newObject */
            areturn
        end local 2 // org.jruby.javasupport.JavaObject newObject
        end local 1 // org.jruby.RubyClass current
        end local 0 // org.jruby.runtime.builtin.IRubyObject self
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       self  Lorg/jruby/runtime/builtin/IRubyObject;
            1    4     1    current  Lorg/jruby/RubyClass;
            2    4     2  newObject  Lorg/jruby/javasupport/JavaObject;
    MethodParameters:
      Name  Flags
      self  final

  private static void appendFeaturesToModule(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject, org.jruby.RubyModule);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/RubyModule;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=7, args_size=3
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // org.jruby.runtime.builtin.IRubyObject self
        start local 2 // org.jruby.RubyModule module
         0: .line 293
            aload 0 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            astore 3 /* runtime */
        start local 3 // org.jruby.Ruby runtime
         1: .line 295
            aload 2 /* module */
            invokevirtual org.jruby.RubyModule.getInstanceVariables:()Lorg/jruby/runtime/builtin/InstanceVariables;
            ldc "@java_class"
            invokeinterface org.jruby.runtime.builtin.InstanceVariables.getInstanceVariable:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 4 /* java_class */
        start local 4 // org.jruby.runtime.builtin.IRubyObject java_class
         2: .line 297
            aload 4 /* java_class */
            ifnull 4
            aload 4 /* java_class */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isTrue:()Z
            ifeq 4
         3: .line 298
            aload 3 /* runtime */
            ldc "can not add Java interface to existing Java interface"
            invokevirtual org.jruby.Ruby.newTypeError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
         4: .line 305
      StackMap locals: org.jruby.Ruby org.jruby.runtime.builtin.IRubyObject
      StackMap stack:
            aload 2 /* module */
            dup
            astore 5
            monitorenter
         5: .line 306
            aload 1 /* self */
            aload 2 /* module */
            invokestatic org.jruby.java.proxies.JavaInterfaceTemplate.initInterfaceModules:(Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Z
            ifeq 9
         6: .line 307
            aload 2 /* module */
            invokevirtual org.jruby.RubyModule.getSingletonClass:()Lorg/jruby/RubyClass;
            astore 6 /* singleton */
        start local 6 // org.jruby.RubyClass singleton
         7: .line 308
            aload 6 /* singleton */
            ldc "append_features"
            new org.jruby.java.proxies.JavaInterfaceTemplate$AppendFeatures
            dup
            aload 6 /* singleton */
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$AppendFeatures.<init>:(Lorg/jruby/RubyModule;)V
            invokevirtual org.jruby.RubyClass.addMethod:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        end local 6 // org.jruby.RubyClass singleton
         8: .line 309
            goto 12
         9: .line 312
      StackMap locals: org.jruby.RubyModule
      StackMap stack:
            aload 2 /* module */
            invokestatic org.jruby.java.proxies.JavaInterfaceTemplate.getInterfaceModules:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            astore 6 /* interfaceModules */
        start local 6 // org.jruby.RubyArray interfaceModules
        10: .line 313
            aload 6 /* interfaceModules */
            aload 0 /* context */
            aload 1 /* self */
            invokevirtual org.jruby.RubyArray.includes:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Z
            ifne 12
        11: .line 314
            aload 6 /* interfaceModules */
            aload 1 /* self */
            invokevirtual org.jruby.RubyArray.append:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        end local 6 // org.jruby.RubyArray interfaceModules
        12: .line 305
      StackMap locals:
      StackMap stack:
            aload 5
            monitorexit
        13: goto 16
      StackMap locals:
      StackMap stack: java.lang.Throwable
        14: aload 5
            monitorexit
        15: athrow
        16: .line 318
      StackMap locals:
      StackMap stack:
            return
        end local 4 // org.jruby.runtime.builtin.IRubyObject java_class
        end local 3 // org.jruby.Ruby runtime
        end local 2 // org.jruby.RubyModule module
        end local 1 // org.jruby.runtime.builtin.IRubyObject self
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   17     0           context  Lorg/jruby/runtime/ThreadContext;
            0   17     1              self  Lorg/jruby/runtime/builtin/IRubyObject;
            0   17     2            module  Lorg/jruby/RubyModule;
            1   17     3           runtime  Lorg/jruby/Ruby;
            2   17     4        java_class  Lorg/jruby/runtime/builtin/IRubyObject;
            7    8     6         singleton  Lorg/jruby/RubyClass;
           10   12     6  interfaceModules  Lorg/jruby/RubyArray;
      Exception table:
        from    to  target  type
           5    13      14  any
          14    15      14  any
    MethodParameters:
         Name  Flags
      context  
      self     final
      module   final

  public static org.jruby.runtime.builtin.IRubyObject extended(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // org.jruby.runtime.builtin.IRubyObject self
        start local 2 // org.jruby.runtime.builtin.IRubyObject object
         0: .line 340
            aload 2 /* object */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getSingletonClass:()Lorg/jruby/RubyClass;
            astore 3 /* singleton */
        start local 3 // org.jruby.RubyClass singleton
         1: .line 341
            aload 3 /* singleton */
            aload 0 /* context */
            aload 1 /* self */
            invokevirtual org.jruby.RubyClass.include:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyModule;
            pop
         2: .line 342
            aload 3 /* singleton */
            areturn
        end local 3 // org.jruby.RubyClass singleton
        end local 2 // org.jruby.runtime.builtin.IRubyObject object
        end local 1 // org.jruby.runtime.builtin.IRubyObject self
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0    context  Lorg/jruby/runtime/ThreadContext;
            0    3     1       self  Lorg/jruby/runtime/builtin/IRubyObject;
            0    3     2     object  Lorg/jruby/runtime/builtin/IRubyObject;
            1    3     3  singleton  Lorg/jruby/RubyClass;
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod()
    MethodParameters:
         Name  Flags
      context  
      self     
      object   

  public static org.jruby.runtime.builtin.IRubyObject op_aref(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject[]);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;[Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // org.jruby.runtime.builtin.IRubyObject self
        start local 2 // org.jruby.runtime.builtin.IRubyObject[] args
         0: .line 347
            aload 0 /* context */
            aload 1 /* self */
            aload 2 /* args */
            invokestatic org.jruby.java.proxies.JavaProxy.op_aref:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;[Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            areturn
        end local 2 // org.jruby.runtime.builtin.IRubyObject[] args
        end local 1 // org.jruby.runtime.builtin.IRubyObject self
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  context  Lorg/jruby/runtime/ThreadContext;
            0    1     1     self  Lorg/jruby/runtime/builtin/IRubyObject;
            0    1     2     args  [Lorg/jruby/runtime/builtin/IRubyObject;
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(name = {"[]"}, rest = true)
    MethodParameters:
         Name  Flags
      context  
      self     
      args     

  public static org.jruby.runtime.builtin.IRubyObject impl(org.jruby.runtime.ThreadContext, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject[], org.jruby.runtime.Block);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;[Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/Block;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=19, args_size=4
        start local 0 // org.jruby.runtime.ThreadContext context
        start local 1 // org.jruby.runtime.builtin.IRubyObject self
        start local 2 // org.jruby.runtime.builtin.IRubyObject[] args
        start local 3 // org.jruby.runtime.Block implBlock
         0: .line 352
            aload 0 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            astore 4 /* runtime */
        start local 4 // org.jruby.Ruby runtime
         1: .line 354
            aload 3 /* implBlock */
            invokevirtual org.jruby.runtime.Block.isGiven:()Z
            ifne 3
         2: .line 355
            aload 4 /* runtime */
            ldc "block required to call #impl on a Java interface"
            invokevirtual org.jruby.Ruby.newArgumentError:(Ljava/lang/String;)Lorg/jruby/exceptions/RaiseException;
            athrow
         3: .line 358
      StackMap locals: org.jruby.Ruby
      StackMap stack:
            iconst_1
            istore 5 /* allMethods */
        start local 5 // boolean allMethods
         4: .line 360
            aload 2 /* args */
            arraylength
            ifne 6
            aconst_null
            astore 6 /* methodNames */
        start local 6 // org.jruby.runtime.builtin.IRubyObject[] methodNames
         5: goto 12
        end local 6 // org.jruby.runtime.builtin.IRubyObject[] methodNames
         6: .line 361
      StackMap locals: int
      StackMap stack:
            aload 2 /* args */
            arraylength
            iconst_1
            if_icmpne 10
            aload 2 /* args */
            iconst_0
            aaload
            instanceof org.jruby.RubyBoolean
            ifeq 10
         7: .line 362
            aload 2 /* args */
            iconst_0
            aaload
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isTrue:()Z
            istore 5 /* allMethods */
         8: .line 363
            aconst_null
            astore 6 /* methodNames */
        start local 6 // org.jruby.runtime.builtin.IRubyObject[] methodNames
         9: .line 364
            goto 12
        end local 6 // org.jruby.runtime.builtin.IRubyObject[] methodNames
        10: .line 366
      StackMap locals:
      StackMap stack:
            aload 2 /* args */
            invokevirtual org.jruby.runtime.builtin.IRubyObject[].clone:()Ljava/lang/Object;
            checkcast org.jruby.runtime.builtin.IRubyObject[]
            astore 6 /* methodNames */
        start local 6 // org.jruby.runtime.builtin.IRubyObject[] methodNames
        11: .line 367
            aload 6 /* methodNames */
            invokestatic java.util.Arrays.sort:([Ljava/lang/Object;)V
        12: .line 371
      StackMap locals: org.jruby.runtime.builtin.IRubyObject[]
      StackMap stack:
            aload 4 /* runtime */
            aload 4 /* runtime */
            invokevirtual org.jruby.Ruby.getObject:()Lorg/jruby/RubyClass;
            invokestatic org.jruby.RubyClass.newClass:(Lorg/jruby/Ruby;Lorg/jruby/RubyClass;)Lorg/jruby/RubyClass;
            astore 7 /* implClass */
        start local 7 // org.jruby.RubyClass implClass
        13: .line 372
            aload 7 /* implClass */
            aload 0 /* context */
            aload 1 /* self */
            invokevirtual org.jruby.RubyClass.include:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyModule;
            pop
        14: .line 374
            new org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl
            dup
            aload 7 /* implClass */
            aload 3 /* implBlock */
            aload 6 /* methodNames */
            invokespecial org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl.<init>:(Lorg/jruby/RubyClass;Lorg/jruby/runtime/Block;[Lorg/jruby/runtime/builtin/IRubyObject;)V
            astore 8 /* ifaceImpl */
        start local 8 // org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl ifaceImpl
        15: .line 375
            aload 7 /* implClass */
            ldc "method_missing"
            aload 8 /* ifaceImpl */
            invokevirtual org.jruby.RubyClass.addMethod:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        16: .line 377
            aload 0 /* context */
            aload 1 /* self */
            checkcast org.jruby.RubyModule
            invokestatic org.jruby.javasupport.JavaClass.getJavaClass:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/RubyModule;)Ljava/lang/Class;
            astore 9 /* ifaceClass */
        start local 9 // java.lang.Class ifaceClass
        17: .line 378
            aload 6 /* methodNames */
            ifnonnull 28
        18: .line 379
            aload 9 /* ifaceClass */
            invokevirtual java.lang.Class.getMethods:()[Ljava/lang/reflect/Method;
            dup
            astore 13
            arraylength
            istore 12
            iconst_0
            istore 11
            goto 26
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject[] org.jruby.runtime.Block org.jruby.Ruby int org.jruby.runtime.builtin.IRubyObject[] org.jruby.RubyClass org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl java.lang.Class top int int java.lang.reflect.Method[]
      StackMap stack:
        19: aload 13
            iload 11
            aaload
            astore 10 /* method */
        start local 10 // java.lang.reflect.Method method
        20: .line 380
            aload 8 /* ifaceImpl */
            aload 10 /* method */
            invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
            invokevirtual org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl.getConcreteMethod:(Ljava/lang/String;)Lorg/jruby/java/proxies/JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod;
            astore 14 /* implMethod */
        start local 14 // org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod implMethod
        21: .line 381
            aload 10 /* method */
            invokevirtual java.lang.reflect.Method.isBridge:()Z
            ifne 25
            aload 10 /* method */
            invokevirtual java.lang.reflect.Method.isSynthetic:()Z
            ifeq 22
            goto 25
        22: .line 382
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject[] org.jruby.runtime.Block org.jruby.Ruby int org.jruby.runtime.builtin.IRubyObject[] org.jruby.RubyClass org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl java.lang.Class java.lang.reflect.Method int int java.lang.reflect.Method[] org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod
      StackMap stack:
            aload 10 /* method */
            invokevirtual java.lang.reflect.Method.getModifiers:()I
            invokestatic java.lang.reflect.Modifier.isStatic:(I)Z
            ifeq 23
            goto 25
        23: .line 384
      StackMap locals:
      StackMap stack:
            iload 5 /* allMethods */
            ifne 24
            aload 10 /* method */
            invokevirtual java.lang.reflect.Method.getModifiers:()I
            invokestatic java.lang.reflect.Modifier.isAbstract:(I)Z
            ifne 24
            goto 25
        24: .line 385
      StackMap locals:
      StackMap stack:
            aload 7 /* implClass */
            aload 10 /* method */
            invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
            aload 14 /* implMethod */
            invokevirtual org.jruby.RubyClass.addMethodInternal:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        end local 14 // org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod implMethod
        end local 10 // java.lang.reflect.Method method
        25: .line 379
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject[] org.jruby.runtime.Block org.jruby.Ruby int org.jruby.runtime.builtin.IRubyObject[] org.jruby.RubyClass org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl java.lang.Class top int int java.lang.reflect.Method[]
      StackMap stack:
            iinc 11 1
      StackMap locals:
      StackMap stack:
        26: iload 11
            iload 12
            if_icmplt 19
        27: .line 387
            goto 46
        28: .line 389
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject[] org.jruby.runtime.Block org.jruby.Ruby int org.jruby.runtime.builtin.IRubyObject[] org.jruby.RubyClass org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl java.lang.Class
      StackMap stack:
            aload 9 /* ifaceClass */
            invokevirtual java.lang.Class.getDeclaredMethods:()[Ljava/lang/reflect/Method;
            astore 10 /* decMethods */
        start local 10 // java.lang.reflect.Method[] decMethods
        29: .line 390
            aload 6 /* methodNames */
            dup
            astore 14
            arraylength
            istore 13
            iconst_0
            istore 12
            goto 45
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject[] org.jruby.runtime.Block org.jruby.Ruby int org.jruby.runtime.builtin.IRubyObject[] org.jruby.RubyClass org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl java.lang.Class java.lang.reflect.Method[] top int int org.jruby.runtime.builtin.IRubyObject[]
      StackMap stack:
        30: aload 14
            iload 12
            aaload
            astore 11 /* methodName */
        start local 11 // org.jruby.runtime.builtin.IRubyObject methodName
        31: .line 391
            aload 11 /* methodName */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            astore 15 /* name */
        start local 15 // java.lang.String name
        32: .line 392
            aload 8 /* ifaceImpl */
            aload 15 /* name */
            invokevirtual org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl.getConcreteMethod:(Ljava/lang/String;)Lorg/jruby/java/proxies/JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod;
            astore 16 /* implMethod */
        start local 16 // org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod implMethod
        33: .line 393
            iconst_0
            istore 17 /* i */
        start local 17 // int i
        34: goto 42
        35: .line 394
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject[] org.jruby.runtime.Block org.jruby.Ruby int org.jruby.runtime.builtin.IRubyObject[] org.jruby.RubyClass org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl java.lang.Class java.lang.reflect.Method[] org.jruby.runtime.builtin.IRubyObject int int org.jruby.runtime.builtin.IRubyObject[] java.lang.String org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod int
      StackMap stack:
            aload 10 /* decMethods */
            iload 17 /* i */
            aaload
            astore 18 /* method */
        start local 18 // java.lang.reflect.Method method
        36: .line 395
            aload 18 /* method */
            invokevirtual java.lang.reflect.Method.isBridge:()Z
            ifne 41
            aload 18 /* method */
            invokevirtual java.lang.reflect.Method.isSynthetic:()Z
            ifeq 37
            goto 41
        37: .line 396
      StackMap locals: java.lang.reflect.Method
      StackMap stack:
            aload 18 /* method */
            invokevirtual java.lang.reflect.Method.getModifiers:()I
            invokestatic java.lang.reflect.Modifier.isStatic:(I)Z
            ifeq 38
            goto 41
        38: .line 398
      StackMap locals:
      StackMap stack:
            aload 15 /* name */
            aload 10 /* decMethods */
            iload 17 /* i */
            aaload
            invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 41
        39: .line 399
            aload 7 /* implClass */
            aload 15 /* name */
            aload 16 /* implMethod */
            invokevirtual org.jruby.RubyClass.addMethodInternal:(Ljava/lang/String;Lorg/jruby/internal/runtime/methods/DynamicMethod;)V
        40: .line 400
            goto 44
        end local 18 // java.lang.reflect.Method method
        41: .line 393
      StackMap locals:
      StackMap stack:
            iinc 17 /* i */ 1
      StackMap locals:
      StackMap stack:
        42: iload 17 /* i */
            aload 10 /* decMethods */
            arraylength
            if_icmplt 35
        end local 17 // int i
        43: .line 404
            aload 4 /* runtime */
            invokevirtual org.jruby.Ruby.getWarnings:()Lorg/jruby/common/RubyWarnings;
            new java.lang.StringBuilder
            dup
            ldc "`"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 15 /* name */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "' is not a declared method in interface "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 9 /* ifaceClass */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual org.jruby.common.RubyWarnings.warn:(Ljava/lang/String;)V
        end local 16 // org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod implMethod
        end local 15 // java.lang.String name
        end local 11 // org.jruby.runtime.builtin.IRubyObject methodName
        44: .line 390
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject[] org.jruby.runtime.Block org.jruby.Ruby int org.jruby.runtime.builtin.IRubyObject[] org.jruby.RubyClass org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl java.lang.Class java.lang.reflect.Method[] top int int org.jruby.runtime.builtin.IRubyObject[]
      StackMap stack:
            iinc 12 1
      StackMap locals:
      StackMap stack:
        45: iload 12
            iload 13
            if_icmplt 30
        end local 10 // java.lang.reflect.Method[] decMethods
        46: .line 408
      StackMap locals: org.jruby.runtime.ThreadContext org.jruby.runtime.builtin.IRubyObject org.jruby.runtime.builtin.IRubyObject[] org.jruby.runtime.Block org.jruby.Ruby int org.jruby.runtime.builtin.IRubyObject[] org.jruby.RubyClass org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl java.lang.Class
      StackMap stack:
            aload 7 /* implClass */
            aload 0 /* context */
            ldc "new"
            invokevirtual org.jruby.RubyClass.callMethod:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            areturn
        end local 9 // java.lang.Class ifaceClass
        end local 8 // org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl ifaceImpl
        end local 7 // org.jruby.RubyClass implClass
        end local 6 // org.jruby.runtime.builtin.IRubyObject[] methodNames
        end local 5 // boolean allMethods
        end local 4 // org.jruby.Ruby runtime
        end local 3 // org.jruby.runtime.Block implBlock
        end local 2 // org.jruby.runtime.builtin.IRubyObject[] args
        end local 1 // org.jruby.runtime.builtin.IRubyObject self
        end local 0 // org.jruby.runtime.ThreadContext context
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   47     0      context  Lorg/jruby/runtime/ThreadContext;
            0   47     1         self  Lorg/jruby/runtime/builtin/IRubyObject;
            0   47     2         args  [Lorg/jruby/runtime/builtin/IRubyObject;
            0   47     3    implBlock  Lorg/jruby/runtime/Block;
            1   47     4      runtime  Lorg/jruby/Ruby;
            4   47     5   allMethods  Z
            5    6     6  methodNames  [Lorg/jruby/runtime/builtin/IRubyObject;
            9   10     6  methodNames  [Lorg/jruby/runtime/builtin/IRubyObject;
           11   47     6  methodNames  [Lorg/jruby/runtime/builtin/IRubyObject;
           13   47     7    implClass  Lorg/jruby/RubyClass;
           15   47     8    ifaceImpl  Lorg/jruby/java/proxies/JavaInterfaceTemplate$BlockInterfaceImpl;
           17   47     9   ifaceClass  Ljava/lang/Class<*>;
           20   25    10       method  Ljava/lang/reflect/Method;
           21   25    14   implMethod  Lorg/jruby/java/proxies/JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod;
           29   46    10   decMethods  [Ljava/lang/reflect/Method;
           31   44    11   methodName  Lorg/jruby/runtime/builtin/IRubyObject;
           32   44    15         name  Ljava/lang/String;
           33   44    16   implMethod  Lorg/jruby/java/proxies/JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod;
           34   43    17            i  I
           36   41    18       method  Ljava/lang/reflect/Method;
    RuntimeVisibleAnnotations: 
      org.jruby.anno.JRubyMethod(name = {"impl"}, rest = true)
    MethodParameters:
           Name  Flags
      context    
      self       
      args       
      implBlock  final

  private static org.jruby.javasupport.JavaClass getJavaClassForInterface(org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/javasupport/JavaClass;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.jruby.runtime.builtin.IRubyObject module
         0: .line 519
            aload 0 /* module */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getInstanceVariables:()Lorg/jruby/runtime/builtin/InstanceVariables;
            ldc "@java_class"
            invokeinterface org.jruby.runtime.builtin.InstanceVariables.getInstanceVariable:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.javasupport.JavaClass
            areturn
        end local 0 // org.jruby.runtime.builtin.IRubyObject module
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  module  Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
        Name  Flags
      module  final

  private static org.jruby.RubyArray getJavaInterfaces(org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.jruby.runtime.builtin.IRubyObject clazz
         0: .line 523
            aload 0 /* clazz */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getInstanceVariables:()Lorg/jruby/runtime/builtin/InstanceVariables;
            ldc "@java_interfaces"
            invokeinterface org.jruby.runtime.builtin.InstanceVariables.getInstanceVariable:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyArray
            areturn
        end local 0 // org.jruby.runtime.builtin.IRubyObject clazz
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0  clazz  Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
       Name  Flags
      clazz  final

  private static org.jruby.RubyArray getInterfaceModules(org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.jruby.runtime.builtin.IRubyObject module
         0: .line 527
            aload 0 /* module */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getInstanceVariables:()Lorg/jruby/runtime/builtin/InstanceVariables;
            ldc "@java_interface_mods"
            invokeinterface org.jruby.runtime.builtin.InstanceVariables.getInstanceVariable:(Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyArray
            areturn
        end local 0 // org.jruby.runtime.builtin.IRubyObject module
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  module  Lorg/jruby/runtime/builtin/IRubyObject;
    MethodParameters:
        Name  Flags
      module  final

  private static boolean initInterfaceModules(org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject);
    descriptor: (Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.jruby.runtime.builtin.IRubyObject self
        start local 1 // org.jruby.runtime.builtin.IRubyObject module
         0: .line 531
            aload 1 /* module */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getInstanceVariables:()Lorg/jruby/runtime/builtin/InstanceVariables;
            ldc "@java_interface_mods"
            invokeinterface org.jruby.runtime.builtin.InstanceVariables.hasInstanceVariable:(Ljava/lang/String;)Z
            ifne 4
         1: .line 532
            aload 0 /* self */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getRuntime:()Lorg/jruby/Ruby;
            aload 0 /* self */
            invokestatic org.jruby.RubyArray.newArray:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            astore 2 /* interfaceMods */
        start local 2 // org.jruby.RubyArray interfaceMods
         2: .line 533
            aload 1 /* module */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getInstanceVariables:()Lorg/jruby/runtime/builtin/InstanceVariables;
            ldc "@java_interface_mods"
            aload 2 /* interfaceMods */
            invokeinterface org.jruby.runtime.builtin.InstanceVariables.setInstanceVariable:(Ljava/lang/String;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
            pop
         3: .line 534
            iconst_1
            ireturn
        end local 2 // org.jruby.RubyArray interfaceMods
         4: .line 536
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 1 // org.jruby.runtime.builtin.IRubyObject module
        end local 0 // org.jruby.runtime.builtin.IRubyObject self
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    5     0           self  Lorg/jruby/runtime/builtin/IRubyObject;
            0    5     1         module  Lorg/jruby/runtime/builtin/IRubyObject;
            2    4     2  interfaceMods  Lorg/jruby/RubyArray;
    MethodParameters:
        Name  Flags
      self    final
      module  final
}
SourceFile: "JavaInterfaceTemplate.java"
NestMembers:
  org.jruby.java.proxies.JavaInterfaceTemplate$1  org.jruby.java.proxies.JavaInterfaceTemplate$2  org.jruby.java.proxies.JavaInterfaceTemplate$3  org.jruby.java.proxies.JavaInterfaceTemplate$4  org.jruby.java.proxies.JavaInterfaceTemplate$AppendFeatures  org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl  org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod  org.jruby.java.proxies.JavaInterfaceTemplate$DummyMethodImpl  org.jruby.java.proxies.JavaInterfaceTemplate$InterfaceProxyFactory  org.jruby.java.proxies.JavaInterfaceTemplate$JavaClassAccessor
InnerClasses:
  org.jruby.java.proxies.JavaInterfaceTemplate$1
  org.jruby.java.proxies.JavaInterfaceTemplate$2
  org.jruby.java.proxies.JavaInterfaceTemplate$3
  org.jruby.java.proxies.JavaInterfaceTemplate$4
  private AppendFeatures = org.jruby.java.proxies.JavaInterfaceTemplate$AppendFeatures of org.jruby.java.proxies.JavaInterfaceTemplate
  private final BlockInterfaceImpl = org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl of org.jruby.java.proxies.JavaInterfaceTemplate
  private final ConcreteMethod = org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl$ConcreteMethod of org.jruby.java.proxies.JavaInterfaceTemplate$BlockInterfaceImpl
  private DummyMethodImpl = org.jruby.java.proxies.JavaInterfaceTemplate$DummyMethodImpl of org.jruby.java.proxies.JavaInterfaceTemplate
  private final InterfaceProxyFactory = org.jruby.java.proxies.JavaInterfaceTemplate$InterfaceProxyFactory of org.jruby.java.proxies.JavaInterfaceTemplate
  private JavaClassAccessor = org.jruby.java.proxies.JavaInterfaceTemplate$JavaClassAccessor of org.jruby.java.proxies.JavaInterfaceTemplate
  public ClassMethods = org.jruby.java.proxies.JavaProxy$ClassMethods of org.jruby.java.proxies.JavaProxy