@JRubyMethod(meta = true, visibility = Visibility.PRIVATE) public static IRubyObject java_alias(ThreadContext context, IRubyObject clazz, IRubyObject newName, IRubyObject rubyName, IRubyObject argTypes) { final Ruby runtime = context.runtime; if ( ! ( clazz instanceof RubyClass ) ) { throw runtime.newTypeError(clazz, runtime.getModule()); } final RubyClass proxyClass = (RubyClass) clazz; String name = rubyName.asJavaString(); String newNameStr = newName.asJavaString(); RubyArray argTypesAry = argTypes.convertToArray(); Class<?>[] argTypesClasses = (Class[]) argTypesAry.toArray(new Class[argTypesAry.size()]); final Method method = getMethodFromClass(context, clazz, name, argTypesClasses); final MethodInvoker invoker; if ( Modifier.isStatic( method.getModifiers() ) ) { invoker = new StaticMethodInvoker(proxyClass.getMetaClass(), method, newNameStr); // add alias to meta proxyClass.getSingletonClass().addMethod(newNameStr, invoker); } else { invoker = new InstanceMethodInvoker(proxyClass, method, newNameStr); proxyClass.addMethod(newNameStr, invoker); } return context.nil; }
@JRubyMethod(meta = true, visibility = Visibility.PRIVATE) public static IRubyObject java_alias(ThreadContext context, IRubyObject clazz, IRubyObject newName, IRubyObject rubyName, IRubyObject argTypes) { final Ruby runtime = context.runtime; if ( ! ( clazz instanceof RubyClass ) ) { throw runtime.newTypeError(clazz, runtime.getModule()); } final RubyClass proxyClass = (RubyClass) clazz; String name = rubyName.asJavaString(); String newNameStr = newName.asJavaString(); RubyArray argTypesAry = argTypes.convertToArray(); Class<?>[] argTypesClasses = (Class[]) argTypesAry.toArray(new Class[argTypesAry.size()]); final Method method = getMethodFromClass(context, clazz, name, argTypesClasses); final MethodInvoker invoker; if ( Modifier.isStatic( method.getModifiers() ) ) { invoker = new StaticMethodInvoker(proxyClass.getMetaClass(), method, newNameStr); // add alias to meta proxyClass.getSingletonClass().addMethod(newNameStr, invoker); } else { invoker = new InstanceMethodInvoker(proxyClass, method, newNameStr); proxyClass.addMethod(newNameStr, invoker); } return context.nil; }
@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); }
private static AbstractRubyMethod getRubyMethod(ThreadContext context, IRubyObject clazz, String name, Class... argTypesClasses) { final Ruby runtime = context.runtime; if ( ! ( clazz instanceof RubyModule ) ) { throw runtime.newTypeError(clazz, runtime.getModule()); } final RubyModule proxyClass = (RubyModule) clazz; final Method method = getMethodFromClass(context, clazz, name, argTypesClasses); final String prettyName = name + CodegenUtils.prettyParams(argTypesClasses); if ( Modifier.isStatic( method.getModifiers() ) ) { MethodInvoker invoker = new StaticMethodInvoker(proxyClass, method, name); return RubyMethod.newMethod(proxyClass, prettyName, proxyClass, name, invoker, clazz); } MethodInvoker invoker = new InstanceMethodInvoker(proxyClass, method, name); return RubyUnboundMethod.newUnboundMethod(proxyClass, prettyName, proxyClass, name, invoker); }
private static AbstractRubyMethod getRubyMethod(ThreadContext context, IRubyObject clazz, String name, Class... argTypesClasses) { final Ruby runtime = context.runtime; if ( ! ( clazz instanceof RubyModule ) ) { throw runtime.newTypeError(clazz, runtime.getModule()); } final RubyModule proxyClass = (RubyModule) clazz; final Method method = getMethodFromClass(context, clazz, name, argTypesClasses); final String prettyName = name + CodegenUtils.prettyParams(argTypesClasses); if ( Modifier.isStatic( method.getModifiers() ) ) { MethodInvoker invoker = new StaticMethodInvoker(proxyClass, method, name); return RubyMethod.newMethod(proxyClass, prettyName, proxyClass, name, invoker, clazz); } MethodInvoker invoker = new InstanceMethodInvoker(proxyClass, method, name); return RubyUnboundMethod.newUnboundMethod(proxyClass, prettyName, proxyClass, name, invoker); }
@JRubyMethod(meta = true, visibility = Visibility.PRIVATE) public static IRubyObject java_alias(ThreadContext context, IRubyObject clazz, IRubyObject newName, IRubyObject rubyName) { return java_alias(context, clazz, newName, rubyName, context.runtime.newEmptyArray()); }
@JRubyMethod(meta = true, visibility = Visibility.PRIVATE) public static IRubyObject java_alias(ThreadContext context, IRubyObject clazz, IRubyObject newName, IRubyObject rubyName) { return java_alias(context, clazz, newName, rubyName, context.runtime.newEmptyArray()); }
@JRubyMethod(meta = true) public static IRubyObject java_send(ThreadContext context, IRubyObject recv, IRubyObject rubyName, IRubyObject argTypes, IRubyObject arg0) { String name = rubyName.asJavaString(); RubyArray argTypesAry = argTypes.convertToArray(); final Ruby runtime = context.runtime; checkArgSizeMismatch(runtime, 1, argTypesAry); Class argTypeClass = (Class) argTypesAry.eltInternal(0).toJava(Class.class); JavaMethod method = new JavaMethod(runtime, getMethodFromClass(context, recv, name, argTypeClass)); return method.invokeStaticDirect(context, arg0.toJava(argTypeClass)); }
@JRubyMethod(meta = true) public static IRubyObject java_send(ThreadContext context, IRubyObject recv, IRubyObject rubyName) { String name = rubyName.asJavaString(); final Ruby runtime = context.runtime; JavaMethod method = new JavaMethod(runtime, getMethodFromClass(context, recv, name)); return method.invokeStaticDirect(context); }
@JRubyMethod(meta = true) public static IRubyObject java_method(ThreadContext context, IRubyObject proxyClass, IRubyObject rubyName, IRubyObject argTypes) { String name = rubyName.asJavaString(); RubyArray argTypesAry = argTypes.convertToArray(); Class[] argTypesClasses = (Class[])argTypesAry.toArray(new Class[argTypesAry.size()]); return getRubyMethod(context, proxyClass, name, argTypesClasses); }
@JRubyMethod(meta = true) public static IRubyObject java_send(ThreadContext context, IRubyObject recv, IRubyObject rubyName, IRubyObject argTypes) { String name = rubyName.asJavaString(); RubyArray argTypesAry = argTypes.convertToArray(); final Ruby runtime = context.runtime; checkArgSizeMismatch(runtime, 0, argTypesAry); JavaMethod method = new JavaMethod(runtime, getMethodFromClass(context, recv, name)); return method.invokeStaticDirect(context); }
@JRubyMethod(meta = true) public static IRubyObject java_send(ThreadContext context, IRubyObject recv, IRubyObject rubyName, IRubyObject argTypes, IRubyObject arg0) { String name = rubyName.asJavaString(); RubyArray argTypesAry = argTypes.convertToArray(); final Ruby runtime = context.runtime; checkArgSizeMismatch(runtime, 1, argTypesAry); Class argTypeClass = (Class) argTypesAry.eltInternal(0).toJava(Class.class); JavaMethod method = new JavaMethod(runtime, getMethodFromClass(context, recv, name, argTypeClass)); return method.invokeStaticDirect(context, arg0.toJava(argTypeClass)); }
@JRubyMethod(meta = true) public static IRubyObject java_send(ThreadContext context, IRubyObject recv, IRubyObject rubyName) { String name = rubyName.asJavaString(); final Ruby runtime = context.runtime; JavaMethod method = new JavaMethod(runtime, getMethodFromClass(context, recv, name)); return method.invokeStaticDirect(context); }
@JRubyMethod(meta = true) public static IRubyObject java_method(ThreadContext context, IRubyObject proxyClass, IRubyObject rubyName, IRubyObject argTypes) { String name = rubyName.asJavaString(); RubyArray argTypesAry = argTypes.convertToArray(); Class[] argTypesClasses = (Class[])argTypesAry.toArray(new Class[argTypesAry.size()]); return getRubyMethod(context, proxyClass, name, argTypesClasses); }
@JRubyMethod(meta = true) public static IRubyObject java_method(ThreadContext context, IRubyObject proxyClass, IRubyObject rubyName) { String name = rubyName.asJavaString(); return getRubyMethod(context, proxyClass, name); }
@JRubyMethod(meta = true) public static IRubyObject java_method(ThreadContext context, IRubyObject proxyClass, IRubyObject rubyName) { String name = rubyName.asJavaString(); return getRubyMethod(context, proxyClass, name); }
@JRubyMethod(meta = true) public static IRubyObject java_send(ThreadContext context, IRubyObject recv, IRubyObject rubyName, IRubyObject argTypes) { String name = rubyName.asJavaString(); RubyArray argTypesAry = argTypes.convertToArray(); final Ruby runtime = context.runtime; checkArgSizeMismatch(runtime, 0, argTypesAry); JavaMethod method = new JavaMethod(runtime, getMethodFromClass(context, recv, name)); return method.invokeStaticDirect(context); }