@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor) findCallableArityOne(self, name, arg0); final Class<?>[] paramTypes = constructor.getParameterTypes(); Object cArg0 = arg0.toJava(paramTypes[0]); setAndCacheProxyObject(context, clazz, proxy, constructor.newInstanceDirect(context, cArg0)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args) { JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor) findCallable(self, name, args, args.length); final Object[] convertedArgs = convertArguments(constructor, args); setAndCacheProxyObject(context, clazz, proxy, constructor.newInstanceDirect(context, convertedArgs)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2, Block block) { if (block.isGiven()) { JavaProxy proxy = castJavaProxy(self); RubyProc proc = RubyProc.newProc(context.runtime, block, block.type); JavaConstructor constructor = (JavaConstructor)findCallableArityFour(self, name, arg0, arg1, arg2, proc); Object cArg0 = convertArg(arg0, constructor, 0); Object cArg1 = convertArg(arg1, constructor, 1); Object cArg2 = convertArg(arg2, constructor, 2); Object cArg3 = convertArg(proc, constructor, 3); proxy.setObject(constructor.newInstanceDirect(cArg0, cArg1, cArg2, cArg3)); return self; } else { return call(context, self, clazz, name, arg0, arg1, arg2); } } }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name) { if (javaVarargsCallables != null) return call(context, self, clazz, name, IRubyObject.NULL_ARRAY); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor) findCallableArityZero(self, name); setAndCacheProxyObject(context, clazz, proxy, constructor.newInstanceDirect(context)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0, arg1, arg2}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor)findCallableArityThree(self, name, arg0, arg1, arg2); Object cArg0 = convertArg(arg0, constructor, 0); Object cArg1 = convertArg(arg1, constructor, 1); Object cArg2 = convertArg(arg2, constructor, 2); proxy.setObject(constructor.newInstanceDirect(cArg0, cArg1, cArg2)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0, arg1, arg2}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor) findCallableArityThree(self, name, arg0, arg1, arg2); final Class<?>[] paramTypes = constructor.getParameterTypes(); Object cArg0 = arg0.toJava(paramTypes[0]); Object cArg1 = arg1.toJava(paramTypes[1]); Object cArg2 = arg2.toJava(paramTypes[2]); setAndCacheProxyObject(context, clazz, proxy, constructor.newInstanceDirect(context, cArg0, cArg1, cArg2)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0, arg1}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor)findCallableArityTwo(self, name, arg0, arg1); Object cArg0 = convertArg(arg0, constructor, 0); Object cArg1 = convertArg(arg1, constructor, 1); proxy.setObject(constructor.newInstanceDirect(cArg0, cArg1)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor)findCallableArityOne(self, name, arg0); Object cArg0 = convertArg(arg0, constructor, 0); proxy.setObject(constructor.newInstanceDirect(cArg0)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0, arg1}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor) findCallableArityTwo(self, name, arg0, arg1); final Class<?>[] paramTypes = constructor.getParameterTypes(); Object cArg0 = arg0.toJava(paramTypes[0]); Object cArg1 = arg1.toJava(paramTypes[1]); setAndCacheProxyObject(context, clazz, proxy, constructor.newInstanceDirect(context, cArg0, cArg1)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2, Block block) { if (block.isGiven()) { JavaProxy proxy = castJavaProxy(self); RubyProc proc = RubyProc.newProc(context.runtime, block, block.type); JavaConstructor constructor = (JavaConstructor) findCallableArityFour(self, name, arg0, arg1, arg2, proc); final Class<?>[] paramTypes = constructor.getParameterTypes(); Object cArg0 = arg0.toJava(paramTypes[0]); Object cArg1 = arg1.toJava(paramTypes[1]); Object cArg2 = arg2.toJava(paramTypes[2]); Object cArg3 = proc.toJava(paramTypes[3]); setAndCacheProxyObject(context, clazz, proxy, constructor.newInstanceDirect(context, cArg0, cArg1, cArg2, cArg3)); return self; } return call(context, self, clazz, name, arg0, arg1, arg2); }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args, Block block) { if (block.isGiven()) { JavaProxy proxy = castJavaProxy(self); final int len = args.length; IRubyObject[] newArgs = ArraySupport.newCopy(args, RubyProc.newProc(context.runtime, block, block.type)); JavaConstructor constructor = (JavaConstructor) findCallable(self, name, newArgs, len + 1); final Class<?>[] paramTypes = constructor.getParameterTypes(); Object[] convertedArgs = new Object[len + 1]; for (int i = 0; i <= len; i++) { convertedArgs[i] = newArgs[i].toJava(paramTypes[i]); } setAndCacheProxyObject(context, clazz, proxy, constructor.newInstanceDirect(context, convertedArgs)); return self; } return call(context, self, clazz, name, args); }
public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args, Block block) { if (block.isGiven()) { Ruby runtime = context.runtime; JavaProxy proxy = castJavaProxy(self); int len = args.length; // too much array creation! Object[] convertedArgs = new Object[len + 1]; IRubyObject[] intermediate = new IRubyObject[len + 1]; System.arraycopy(args, 0, intermediate, 0, len); intermediate[len] = RubyProc.newProc(runtime, block, block.type); JavaConstructor constructor = (JavaConstructor)findCallable(self, name, intermediate, len + 1); for (int i = 0; i < len + 1; i++) { convertedArgs[i] = convertArg(intermediate[i], constructor, i); } proxy.setObject(constructor.newInstanceDirect(convertedArgs)); return self; } else { return call(context, self, clazz, name, args); } }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name) { if (javaVarargsCallables != null) return call(context, self, clazz, name, IRubyObject.NULL_ARRAY); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor)findCallableArityZero(self, name); proxy.setObject(constructor.newInstanceDirect()); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args) { JavaProxy proxy = castJavaProxy(self); int len = args.length; Object[] convertedArgs = new Object[len]; JavaConstructor constructor = (JavaConstructor)findCallable(self, name, args, len); if (constructor.isVarArgs()) { len = constructor.getParameterTypes().length - 1; convertedArgs = new Object[len + 1]; for (int i = 0; i < len && i < args.length; i++) { convertedArgs[i] = convertArg(args[i], constructor, i); } convertedArgs[len] = convertVarargs(args, constructor); } else { convertedArgs = new Object[len]; for (int i = 0; i < len && i < args.length; i++) { convertedArgs[i] = convertArg(args[i], constructor, i); } } proxy.setObject(constructor.newInstanceDirect(convertedArgs)); return self; }
@Override void install(final RubyModule proxy) { if ( localConstructor ) { proxy.addMethod(name, new ConstructorInvoker(proxy, constructors, name)); } else { // if there's no constructor, we must prevent construction proxy.addMethod(name, new org.jruby.internal.runtime.methods.JavaMethod(proxy, PUBLIC, name) { @Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args, Block block) { throw context.runtime.newTypeError("no public constructors for " + clazz); } }); } } }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0, arg1, arg2}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor) findCallableArityThree(self, name, arg0, arg1, arg2); final Class<?>[] paramTypes = constructor.getParameterTypes(); Object cArg0 = arg0.toJava(paramTypes[0]); Object cArg1 = arg1.toJava(paramTypes[1]); Object cArg2 = arg2.toJava(paramTypes[2]); setAndCacheProxyObject(context, clazz, proxy, constructor.newInstanceDirect(context, cArg0, cArg1, cArg2)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0, arg1}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor)findCallableArityTwo(self, name, arg0, arg1); Object cArg0 = convertArg(arg0, constructor, 0); Object cArg1 = convertArg(arg1, constructor, 1); proxy.setObject(constructor.newInstanceDirect(cArg0, cArg1)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor)findCallableArityOne(self, name, arg0); Object cArg0 = convertArg(arg0, constructor, 0); proxy.setObject(constructor.newInstanceDirect(cArg0)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0, arg1, arg2}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor)findCallableArityThree(self, name, arg0, arg1, arg2); Object cArg0 = convertArg(arg0, constructor, 0); Object cArg1 = convertArg(arg1, constructor, 1); Object cArg2 = convertArg(arg2, constructor, 2); proxy.setObject(constructor.newInstanceDirect(cArg0, cArg1, cArg2)); return self; }
@Override public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject arg0, IRubyObject arg1) { if (javaVarargsCallables != null) return call(context, self, clazz, name, new IRubyObject[] {arg0, arg1}); JavaProxy proxy = castJavaProxy(self); JavaConstructor constructor = (JavaConstructor) findCallableArityTwo(self, name, arg0, arg1); final Class<?>[] paramTypes = constructor.getParameterTypes(); Object cArg0 = arg0.toJava(paramTypes[0]); Object cArg1 = arg1.toJava(paramTypes[1]); setAndCacheProxyObject(context, clazz, proxy, constructor.newInstanceDirect(context, cArg0, cArg1)); return self; }