@SuppressWarnings("unchecked") JavaProxyMethod initMethod(final String name, final String desc, final boolean hasSuper) { final Class proxy = this.proxyClass; try { Class[] paramTypes = parse(proxy.getClassLoader(), desc); Method method = proxy.getDeclaredMethod(name, paramTypes); Method superMethod = null; if ( hasSuper ) { superMethod = proxy.getDeclaredMethod("__super$" + name, paramTypes); } JavaProxyMethod proxyMethod = new ProxyMethodImpl(getRuntime(), this, method, superMethod); methods.add(proxyMethod); ArrayList<JavaProxyMethod> methodsWithName = this.methodMap.get(name); if (methodsWithName == null) { methodsWithName = new ArrayList<>(2); methodMap.put(name, methodsWithName); } methodsWithName.add(proxyMethod); return proxyMethod; } catch (ClassNotFoundException e) { throw new InternalError(e.getMessage()); } catch (SecurityException e) { throw new InternalError(e.getMessage()); } catch (NoSuchMethodException e) { throw new InternalError(e.getMessage()); } }
@Override @JRubyMethod public RubyString inspect() { StringBuilder str = new StringBuilder(); str.append("#<"); str.append( getDeclaringClass().nameOnInspection() ).append('/').append( getName() ); inspectParameterTypes(str, this); str.append('>'); return RubyString.newString(getRuntime(), str); }
@JRubyMethod public IRubyObject inspect() { StringBuilder result = new StringBuilder(); result.append(nameOnInspection()); result.append("("); Class[] parameterTypes = getParameterTypes(); for (int i = 0; i < parameterTypes.length; i++) { result.append(parameterTypes[i].getName()); if (i < parameterTypes.length - 1) { result.append(','); } } result.append(")>"); return getRuntime().newString(result.toString()); }
@JRubyMethod(name = "invoke", rest = true) public IRubyObject do_invoke(IRubyObject[] nargs) { if (nargs.length != 1 + getArity()) { throw getRuntime().newArgumentError(nargs.length, 1 + getArity()); throw getRuntime().newTypeError("invokee not a java object"); System.arraycopy(nargs, 1, arguments, 0, arguments.length); Class[] parameterTypes = getParameterTypes(); for (int i = 0; i < arguments.length; i++) { arguments[i] = return JavaUtil.convertJavaToRuby(getRuntime(), javaResult, getReturnType()); } catch (IllegalArgumentException e) { throw getRuntime().newTypeError("expected " + argument_types().inspect()); } catch (IllegalAccessException iae) { throw getRuntime().newTypeError("illegal access on '" + sm.getName() + "': " + iae.getMessage()); } catch (InvocationTargetException ite) { if (getRuntime().getDebug().isTrue()) ite.getTargetException().printStackTrace(); getRuntime().getJavaSupport().handleNativeException(ite.getTargetException(), sm); return getRuntime().getNil();
@JRubyMethod(name = "invoke", rest = true) public IRubyObject do_invoke(IRubyObject[] nargs) { if (nargs.length != 1 + getArity()) { throw getRuntime().newArgumentError(nargs.length, 1 + getArity()); throw getRuntime().newTypeError("invokee not a java object"); System.arraycopy(nargs, 1, arguments, 0, arguments.length); Class[] parameterTypes = getParameterTypes(); for (int i = 0; i < arguments.length; i++) { arguments[i] = return JavaUtil.convertJavaToRuby(getRuntime(), javaResult, getReturnType()); } catch (IllegalArgumentException e) { throw getRuntime().newTypeError("expected " + argument_types().inspect()); } catch (IllegalAccessException iae) { throw getRuntime().newTypeError("illegal access on '" + sm.getName() + "': " + iae.getMessage()); } catch (InvocationTargetException ite) { if (getRuntime().getDebug().isTrue()) ite.getTargetException().printStackTrace(); getRuntime().getJavaSupport().handleNativeException(ite.getTargetException(), sm); return getRuntime().getNil();
@JRubyMethod(name = "invoke", rest = true) public IRubyObject do_invoke(final IRubyObject[] args) { final Ruby runtime= getRuntime(); if ( args.length != 1 + getArity() ) { throw runtime.newArgumentError(args.length, 1 + getArity()); final Class[] parameterTypes = getParameterTypes(); for (int i = 0; i < arguments.length; i++) { arguments[i] = args[i + 1].toJava( parameterTypes[i] ); return JavaUtil.convertJavaToRuby(runtime, javaResult, getReturnType()); throw runtime.newTypeError("expected " + argument_types().inspect());
JavaProxyMethod initMethod(String name, String desc, boolean hasSuper) { Class proxy = proxyClass; try { Class[] parms = parse(proxy.getClassLoader(), desc); Method m = proxy.getDeclaredMethod(name, parms); Method sm = null; if (hasSuper) { sm = proxy.getDeclaredMethod("__super$" + name, parms); } JavaProxyMethod jpm = new ProxyMethodImpl(getRuntime(), this, m, sm); methods.add(jpm); List<JavaProxyMethod> methodsWithName = methodMap.get(name); if (methodsWithName == null) { methodsWithName = new ArrayList<JavaProxyMethod>(2); methodMap.put(name,methodsWithName); } methodsWithName.add(jpm); return jpm; } catch (ClassNotFoundException e) { throw new InternalError(e.getMessage()); } catch (SecurityException e) { throw new InternalError(e.getMessage()); } catch (NoSuchMethodException e) { throw new InternalError(e.getMessage()); } }
@SuppressWarnings("unchecked") JavaProxyMethod initMethod(final String name, final String desc, final boolean hasSuper) { final Class proxy = this.proxyClass; try { Class[] paramTypes = parse(proxy.getClassLoader(), desc); Method method = proxy.getDeclaredMethod(name, paramTypes); Method superMethod = null; if ( hasSuper ) { superMethod = proxy.getDeclaredMethod("__super$" + name, paramTypes); } JavaProxyMethod proxyMethod = new ProxyMethodImpl(getRuntime(), this, method, superMethod); methods.add(proxyMethod); ArrayList<JavaProxyMethod> methodsWithName = this.methodMap.get(name); if (methodsWithName == null) { methodsWithName = new ArrayList<>(2); methodMap.put(name, methodsWithName); } methodsWithName.add(proxyMethod); return proxyMethod; } catch (ClassNotFoundException e) { throw new InternalError(e.getMessage()); } catch (SecurityException e) { throw new InternalError(e.getMessage()); } catch (NoSuchMethodException e) { throw new InternalError(e.getMessage()); } }
@JRubyMethod(name = "invoke", rest = true) public IRubyObject do_invoke(final IRubyObject[] args) { final Ruby runtime= getRuntime(); if ( args.length != 1 + getArity() ) { throw runtime.newArgumentError(args.length, 1 + getArity()); final Class[] parameterTypes = getParameterTypes(); for (int i = 0; i < arguments.length; i++) { arguments[i] = args[i + 1].toJava( parameterTypes[i] ); return JavaUtil.convertJavaToRuby(runtime, javaResult, getReturnType()); throw runtime.newTypeError("expected " + argument_types().inspect());
JavaProxyMethod initMethod(String name, String desc, boolean hasSuper) { Class proxy = proxyClass; try { Class[] parms = parse(proxy.getClassLoader(), desc); Method m = proxy.getDeclaredMethod(name, parms); Method sm = null; if (hasSuper) { sm = proxy.getDeclaredMethod("__super$" + name, parms); } JavaProxyMethod jpm = new ProxyMethodImpl(getRuntime(), this, m, sm); methods.add(jpm); List<JavaProxyMethod> methodsWithName = methodMap.get(name); if (methodsWithName == null) { methodsWithName = new ArrayList<JavaProxyMethod>(2); methodMap.put(name,methodsWithName); } methodsWithName.add(jpm); return jpm; } catch (ClassNotFoundException e) { throw new InternalError(e.getMessage()); } catch (SecurityException e) { throw new InternalError(e.getMessage()); } catch (NoSuchMethodException e) { throw new InternalError(e.getMessage()); } }
@JRubyMethod public IRubyObject inspect() { StringBuilder result = new StringBuilder(); result.append(nameOnInspection()); result.append("("); Class[] parameterTypes = getParameterTypes(); for (int i = 0; i < parameterTypes.length; i++) { result.append(parameterTypes[i].getName()); if (i < parameterTypes.length - 1) { result.append(','); } } result.append(")>"); return getRuntime().newString(result.toString()); }
public final int getArity() { return getParameterTypes().length; }
protected String nameOnInspection() { return getDeclaringClass().nameOnInspection() + "/" + getName(); }
protected String nameOnInspection() { return getDeclaringClass().nameOnInspection() + "/" + getName(); }
public RubyObject name() { return getRuntime().newString(getName()); }
public final int getArity() { return getParameterTypes().length; }
private int getArity() { return getParameterTypes().length; }
private int getArity() { return getParameterTypes().length; }
public RubyObject name() { return getRuntime().newString(getName()); }
public RubyObject name() { return getRuntime().newString(getName()); }