final class org.jruby.javasupport.Java$InterfaceProxyHandler implements java.lang.reflect.InvocationHandler
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: org.jruby.javasupport.Java$InterfaceProxyHandler
super_class: java.lang.Object
{
final org.jruby.runtime.builtin.IRubyObject wrapper;
descriptor: Lorg/jruby/runtime/builtin/IRubyObject;
flags: (0x0010) ACC_FINAL
private final java.lang.String[] ifaceNames;
descriptor: [Ljava/lang/String;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private java.util.Map<java.lang.reflect.Method, java.lang.Class[]> parameterTypeCache;
descriptor: Ljava/util/Map;
flags: (0x0002) ACC_PRIVATE
Signature: Ljava/util/Map<Ljava/lang/reflect/Method;[Ljava/lang/Class;>;
void <init>(org.jruby.runtime.builtin.IRubyObject, java.lang.Class[]);
descriptor: (Lorg/jruby/runtime/builtin/IRubyObject;[Ljava/lang/Class;)V
flags: (0x0000)
Code:
stack=4, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
aload 1
putfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
2: aload 0
aload 2
arraylength
anewarray java.lang.String
putfield org.jruby.javasupport.Java$InterfaceProxyHandler.ifaceNames:[Ljava/lang/String;
3: iconst_0
istore 3
start local 3 4: goto 7
5: StackMap locals: org.jruby.javasupport.Java$InterfaceProxyHandler org.jruby.runtime.builtin.IRubyObject java.lang.Class[] int
StackMap stack:
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.ifaceNames:[Ljava/lang/String;
iload 3
aload 2
iload 3
aaload
invokevirtual java.lang.Class.getName:()Ljava/lang/String;
aastore
6: iinc 3 1
StackMap locals:
StackMap stack:
7: iload 3
aload 2
arraylength
if_icmplt 5
end local 3 8: aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.ifaceNames:[Ljava/lang/String;
invokestatic java.util.Arrays.sort:([Ljava/lang/Object;)V
9: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 this Lorg/jruby/javasupport/Java$InterfaceProxyHandler;
0 10 1 wrapper Lorg/jruby/runtime/builtin/IRubyObject;
0 10 2 interfaces [Ljava/lang/Class;
4 8 3 i I
MethodParameters:
Name Flags
wrapper final
interfaces final
public java.lang.Object invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]);
descriptor: (Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=11, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 2
invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
astore 4
start local 4 1: aload 3
ifnonnull 2
iconst_0
goto 3
StackMap locals: java.lang.String
StackMap stack:
2: aload 3
arraylength
StackMap locals:
StackMap stack: int
3: istore 5
start local 5 4: aload 4
dup
astore 6
invokevirtual java.lang.String.hashCode:()I
lookupswitch { // 4
-1861916316: 5
-1776922004: 6
-1295482945: 7
147696667: 8
default: 17
}
StackMap locals: int java.lang.String
StackMap stack:
5: aload 6
ldc "__ruby_object"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 16
goto 17
StackMap locals:
StackMap stack:
6: aload 6
ldc "toString"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 9
goto 17
StackMap locals:
StackMap stack:
7: aload 6
ldc "equals"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 13
goto 17
StackMap locals:
StackMap stack:
8: aload 6
ldc "hashCode"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 11
goto 17
9: StackMap locals:
StackMap stack:
iload 5
ifne 17
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
ldc "toString"
invokeinterface org.jruby.runtime.builtin.IRubyObject.respondsTo:(Ljava/lang/String;)Z
ifne 17
10: aload 0
aload 1
invokevirtual org.jruby.javasupport.Java$InterfaceProxyHandler.proxyToString:(Ljava/lang/Object;)Ljava/lang/String;
areturn
11: StackMap locals:
StackMap stack:
iload 5
ifne 17
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
ldc "hashCode"
invokeinterface org.jruby.runtime.builtin.IRubyObject.respondsTo:(Ljava/lang/String;)Z
ifne 17
12: aload 0
aload 1
invokevirtual org.jruby.javasupport.Java$InterfaceProxyHandler.proxyHashCode:(Ljava/lang/Object;)I
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
areturn
13: StackMap locals:
StackMap stack:
iload 5
iconst_1
if_icmpne 17
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
ldc "equals"
invokeinterface org.jruby.runtime.builtin.IRubyObject.respondsTo:(Ljava/lang/String;)Z
ifne 17
14: aload 0
aload 2
invokevirtual org.jruby.javasupport.Java$InterfaceProxyHandler.getParameterTypes:(Ljava/lang/reflect/Method;)[Ljava/lang/Class;
astore 7
start local 7 15: aload 7
iconst_0
aaload
ldc Ljava/lang/Object;
if_acmpne 17
aload 0
aload 1
aload 3
iconst_0
aaload
invokevirtual org.jruby.javasupport.Java$InterfaceProxyHandler.proxyEquals:(Ljava/lang/Object;Ljava/lang/Object;)Z
invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
areturn
end local 7 16: StackMap locals:
StackMap stack:
iload 5
ifne 17
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
areturn
17: StackMap locals:
StackMap stack:
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
invokeinterface org.jruby.runtime.builtin.IRubyObject.getRuntime:()Lorg/jruby/Ruby;
astore 7
start local 7 18: aload 7
invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
astore 8
start local 8 19: iload 5
tableswitch { // 0 - 1
0: 20
1: 21
default: 23
}
20: StackMap locals: org.jruby.javasupport.Java$InterfaceProxyHandler java.lang.Object java.lang.reflect.Method java.lang.Object[] java.lang.String int top org.jruby.Ruby org.jruby.runtime.ThreadContext
StackMap stack:
aload 8
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
aload 4
invokestatic org.jruby.runtime.Helpers.invoke:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Ljava/lang/String;)Lorg/jruby/runtime/builtin/IRubyObject;
aload 2
invokevirtual java.lang.reflect.Method.getReturnType:()Ljava/lang/Class;
invokeinterface org.jruby.runtime.builtin.IRubyObject.toJava:(Ljava/lang/Class;)Ljava/lang/Object;
areturn
21: StackMap locals:
StackMap stack:
aload 7
aload 3
iconst_0
aaload
invokestatic org.jruby.javasupport.JavaUtil.convertJavaToUsableRubyObject:(Lorg/jruby/Ruby;Ljava/lang/Object;)Lorg/jruby/runtime/builtin/IRubyObject;
astore 9
start local 9 22: aload 8
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
aload 4
aload 9
invokestatic org.jruby.runtime.Helpers.invoke:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Ljava/lang/String;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
aload 2
invokevirtual java.lang.reflect.Method.getReturnType:()Ljava/lang/Class;
invokeinterface org.jruby.runtime.builtin.IRubyObject.toJava:(Ljava/lang/Class;)Ljava/lang/Object;
areturn
end local 9 23: StackMap locals:
StackMap stack:
aload 7
aload 3
invokestatic org.jruby.javasupport.JavaUtil.convertJavaArrayToRuby:(Lorg/jruby/Ruby;[Ljava/lang/Object;)[Lorg/jruby/runtime/builtin/IRubyObject;
astore 10
start local 10 24: aload 8
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
aload 4
aload 10
invokestatic org.jruby.runtime.Helpers.invoke:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Ljava/lang/String;[Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject;
aload 2
invokevirtual java.lang.reflect.Method.getReturnType:()Ljava/lang/Class;
invokeinterface org.jruby.runtime.builtin.IRubyObject.toJava:(Ljava/lang/Class;)Ljava/lang/Object;
areturn
end local 10 end local 8 end local 7 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 25 0 this Lorg/jruby/javasupport/Java$InterfaceProxyHandler;
0 25 1 proxy Ljava/lang/Object;
0 25 2 method Ljava/lang/reflect/Method;
0 25 3 nargs [Ljava/lang/Object;
1 25 4 methodName Ljava/lang/String;
4 25 5 length I
15 16 7 parameterTypes [Ljava/lang/Class;
18 25 7 runtime Lorg/jruby/Ruby;
19 25 8 context Lorg/jruby/runtime/ThreadContext;
22 23 9 arg Lorg/jruby/runtime/builtin/IRubyObject;
24 25 10 args [Lorg/jruby/runtime/builtin/IRubyObject;
Exceptions:
throws java.lang.Throwable
MethodParameters:
Name Flags
proxy
method
nargs
final java.lang.String proxyToString(java.lang.Object);
descriptor: (Ljava/lang/Object;)Ljava/lang/String;
flags: (0x0010) ACC_FINAL
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: new java.lang.StringBuilder
dup
aload 1
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokevirtual java.lang.Class.getName:()Ljava/lang/String;
invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
bipush 123
invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
aload 0
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
bipush 125
invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/jruby/javasupport/Java$InterfaceProxyHandler;
0 1 1 proxy Ljava/lang/Object;
MethodParameters:
Name Flags
proxy final
final boolean proxyEquals(java.lang.Object, java.lang.Object);
descriptor: (Ljava/lang/Object;Ljava/lang/Object;)Z
flags: (0x0010) ACC_FINAL
Code:
stack=2, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 2
if_acmpne 1
iconst_1
ireturn
1: StackMap locals:
StackMap stack:
aload 2
ifnonnull 2
iconst_0
ireturn
2: StackMap locals:
StackMap stack:
aload 2
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokestatic java.lang.reflect.Proxy.isProxyClass:(Ljava/lang/Class;)Z
ifeq 8
3: aload 2
invokestatic java.lang.reflect.Proxy.getInvocationHandler:(Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler;
astore 3
start local 3 4: aload 3
instanceof org.jruby.javasupport.Java$InterfaceProxyHandler
ifeq 8
5: aload 3
checkcast org.jruby.javasupport.Java$InterfaceProxyHandler
astore 4
start local 4 6: aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
aload 4
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
if_acmpeq 7
iconst_0
ireturn
7: StackMap locals: java.lang.reflect.InvocationHandler org.jruby.javasupport.Java$InterfaceProxyHandler
StackMap stack:
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.ifaceNames:[Ljava/lang/String;
aload 4
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.ifaceNames:[Ljava/lang/String;
invokestatic java.util.Arrays.equals:([Ljava/lang/Object;[Ljava/lang/Object;)Z
ireturn
end local 4 end local 3 8: StackMap locals:
StackMap stack:
iconst_0
ireturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lorg/jruby/javasupport/Java$InterfaceProxyHandler;
0 9 1 proxy Ljava/lang/Object;
0 9 2 otherProxy Ljava/lang/Object;
4 8 3 other Ljava/lang/reflect/InvocationHandler;
6 8 4 that Lorg/jruby/javasupport/Java$InterfaceProxyHandler;
MethodParameters:
Name Flags
proxy final
otherProxy final
final int proxyHashCode(java.lang.Object);
descriptor: (Ljava/lang/Object;)I
flags: (0x0010) ACC_FINAL
Code:
stack=2, locals=7, args_size=2
start local 0 start local 1 0: bipush 11
aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.wrapper:Lorg/jruby/runtime/builtin/IRubyObject;
invokevirtual java.lang.Object.hashCode:()I
imul
istore 2
start local 2 1: aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.ifaceNames:[Ljava/lang/String;
dup
astore 6
arraylength
istore 5
iconst_0
istore 4
goto 5
StackMap locals: org.jruby.javasupport.Java$InterfaceProxyHandler java.lang.Object int top int int java.lang.String[]
StackMap stack:
2: aload 6
iload 4
aaload
astore 3
start local 3 3: bipush 31
iload 2
imul
aload 3
invokevirtual java.lang.String.hashCode:()I
iadd
istore 2
end local 3 4: iinc 4 1
StackMap locals:
StackMap stack:
5: iload 4
iload 5
if_icmplt 2
6: iload 2
ireturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lorg/jruby/javasupport/Java$InterfaceProxyHandler;
0 7 1 proxy Ljava/lang/Object;
1 7 2 hash I
3 4 3 iface Ljava/lang/String;
MethodParameters:
Name Flags
proxy final
private java.lang.Class[] getParameterTypes(java.lang.reflect.Method);
descriptor: (Ljava/lang/reflect/Method;)[Ljava/lang/Class;
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=4, args_size=2
start local 0 start local 1 0: aload 0
getfield org.jruby.javasupport.Java$InterfaceProxyHandler.parameterTypeCache:Ljava/util/Map;
astore 2
start local 2 1: aload 2
ifnonnull 4
2: new java.util.concurrent.ConcurrentHashMap
dup
iconst_4
invokespecial java.util.concurrent.ConcurrentHashMap.<init>:(I)V
astore 2
3: aload 0
aload 2
putfield org.jruby.javasupport.Java$InterfaceProxyHandler.parameterTypeCache:Ljava/util/Map;
4: StackMap locals: java.util.Map
StackMap stack:
aload 2
aload 1
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.lang.Class[]
astore 3
start local 3 5: aload 3
ifnonnull 8
6: aload 1
invokevirtual java.lang.reflect.Method.getParameterTypes:()[Ljava/lang/Class;
astore 3
7: aload 2
aload 1
aload 3
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
8: StackMap locals: java.lang.Class[]
StackMap stack:
aload 3
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lorg/jruby/javasupport/Java$InterfaceProxyHandler;
0 9 1 method Ljava/lang/reflect/Method;
1 9 2 parameterTypeCache Ljava/util/Map<Ljava/lang/reflect/Method;[Ljava/lang/Class;>;
5 9 3 parameterTypes [Ljava/lang/Class;
MethodParameters:
Name Flags
method final
}
SourceFile: "Java.java"
NestHost: org.jruby.javasupport.Java
InnerClasses:
private final InterfaceProxyHandler = org.jruby.javasupport.Java$InterfaceProxyHandler of org.jruby.javasupport.Java