@JRubyMethod(required = 1, rest = true, meta = true) public static IRubyObject java_send(ThreadContext context, IRubyObject recv, IRubyObject[] args) { switch (args.length) { case 1: return java_send(context, recv, args[0]); case 2: return java_send(context, recv, args[0], args[1]); case 3: return java_send(context, recv, args[0], args[1], args[2]); } final Ruby runtime = context.runtime; String name = args[0].asJavaString(); RubyArray argTypesAry = args[1].convertToArray(); final int argsLen = args.length - 2; checkArgSizeMismatch(runtime, argsLen, argTypesAry); Class[] argTypesClasses = (Class[]) argTypesAry.toArray(new Class[argsLen]); Object[] javaArgs = new Object[argsLen]; for ( int i = 0; i < argsLen; i++ ) { javaArgs[i] = args[i + 2].toJava( argTypesClasses[i] ); } JavaMethod method = new JavaMethod(runtime, getMethodFromClass(context, recv, name, argTypesClasses)); return method.invokeStaticDirect(context, javaArgs); }
@JRubyMethod(required = 1, rest = true, meta = true) public static IRubyObject java_send(ThreadContext context, IRubyObject recv, IRubyObject[] args) { switch (args.length) { case 1: return java_send(context, recv, args[0]); case 2: return java_send(context, recv, args[0], args[1]); case 3: return java_send(context, recv, args[0], args[1], args[2]); } final Ruby runtime = context.runtime; String name = args[0].asJavaString(); RubyArray argTypesAry = args[1].convertToArray(); final int argsLen = args.length - 2; checkArgSizeMismatch(runtime, argsLen, argTypesAry); Class[] argTypesClasses = (Class[]) argTypesAry.toArray(new Class[argsLen]); Object[] javaArgs = new Object[argsLen]; for ( int i = 0; i < argsLen; i++ ) { javaArgs[i] = args[i + 2].toJava( argTypesClasses[i] ); } JavaMethod method = new JavaMethod(runtime, getMethodFromClass(context, recv, name, argTypesClasses)); return method.invokeStaticDirect(context, javaArgs); }