private static StringBuilder inspectParameterTypes( final StringBuilder str, final ParameterTypes target, final boolean brackets) { if ( brackets ) str.append('('); final Class<?>[] types = target.getParameterTypes(); for ( int i = 0; i < types.length; i++ ) { str.append( types[i].getName() ); if ( i < types.length - 1 ) str.append(','); } if ( brackets ) str.append(')'); return str; }
private static StringBuilder inspectParameterTypes( final StringBuilder str, final ParameterTypes target, final boolean brackets) { if ( brackets ) str.append('('); final Class<?>[] types = target.getParameterTypes(); for ( int i = 0; i < types.length; i++ ) { str.append( types[i].getName() ); if ( i < types.length - 1 ) str.append(','); } if ( brackets ) str.append(')'); return str; }
private static boolean exactMatch(ParameterTypes paramTypes, IRubyObject... args) { final Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!EXACT.match(types[i], args[i])) { return false; } } return true; }
private static boolean exactMatch(ParameterTypes paramTypes, IRubyObject... args) { final Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!EXACT.match(types[i], args[i])) { return false; } } return true; }
private static boolean exactMatch(ParameterTypes paramTypes, IRubyObject... args) { Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!EXACT.match(types[i], args[i])) { return false; } } return true; }
private static boolean exactMatch(ParameterTypes paramTypes, IRubyObject... args) { Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!EXACT.match(types[i], args[i])) { return false; } } return true; }
private static List<ParameterTypes> findCallable(ParameterTypes[] callables, IRubyObject... args) { List<ParameterTypes> retainedCallables = new ArrayList<ParameterTypes>(callables.length); List<ParameterTypes> incomingCallables = new ArrayList<ParameterTypes>(Arrays.asList(callables)); for (int currentArg = 0; currentArg < args.length; currentArg++) { retainedCallables.clear(); for (Matcher matcher : MATCH_SEQUENCE) { for (Iterator<ParameterTypes> callableIter = incomingCallables.iterator(); callableIter.hasNext();) { ParameterTypes callable = callableIter.next(); Class[] types = callable.getParameterTypes(); if (matcher.match(types[currentArg], args[currentArg])) { callableIter.remove(); retainedCallables.add(callable); } } } incomingCallables.clear(); incomingCallables.addAll(retainedCallables); } return retainedCallables; }
private static boolean assignableOrDuckable(ParameterTypes paramTypes, IRubyObject... args) { final Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) || DUCKABLE.match(types[i], args[i]))) { return false; } } return true; }
private static boolean assignableAndPrimitivable(ParameterTypes paramTypes, IRubyObject... args) { final Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) && PRIMITIVABLE.match(types[i], args[i]))) { return false; } } return true; }
private static boolean assignableAndPrimitivable(ParameterTypes paramTypes, IRubyObject... args) { Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) && PRIMITIVABLE.match(types[i], args[i]))) { return false; } } return true; }
private static boolean assignableAndPrimitivable(ParameterTypes paramTypes, IRubyObject... args) { Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) && PRIMITIVABLE.match(types[i], args[i]))) { return false; } } return true; }
private static boolean assignableOrDuckable(ParameterTypes paramTypes, IRubyObject... args) { final Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) || DUCKABLE.match(types[i], args[i]))) { return false; } } return true; }
private static boolean assignableAndPrimitivable(ParameterTypes paramTypes, IRubyObject... args) { final Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) && PRIMITIVABLE.match(types[i], args[i]))) { return false; } } return true; }
private static boolean assignableOrDuckable(ParameterTypes paramTypes, IRubyObject... args) { Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) || DUCKABLE.match(types[i], args[i]))) { return false; } } return true; }
private static boolean assignableOrDuckable(ParameterTypes paramTypes, IRubyObject... args) { Class[] types = paramTypes.getParameterTypes(); if (args.length != types.length) return false; for (int i = 0; i < types.length; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) || DUCKABLE.match(types[i], args[i]))) { return false; } } return true; }
public static Object[] convertArguments(final ParameterTypes method, final IRubyObject arg0, final int addSpace) { final Class<?>[] paramTypes = method.getParameterTypes(); final Object[] javaArgs; if ( method.isVarArgs() ) { javaArgs = new Object[ 1 + addSpace ]; javaArgs[0] = convertVarArgumentsOnly(paramTypes[0], arg0); } else { javaArgs = new Object[ 1 + addSpace ]; javaArgs[0] = arg0.toJava(paramTypes[0]); } return javaArgs; }
public static Object[] convertArguments(final ParameterTypes method, final IRubyObject arg0, final int addSpace) { final Class<?>[] paramTypes = method.getParameterTypes(); final Object[] javaArgs; if ( method.isVarArgs() ) { javaArgs = new Object[ 1 + addSpace ]; javaArgs[0] = convertVarArgumentsOnly(paramTypes[0], arg0); } else { javaArgs = new Object[ 1 + addSpace ]; javaArgs[0] = arg0.toJava(paramTypes[0]); } return javaArgs; }
private static boolean assignableAndPrimitivableWithVarargs(ParameterTypes paramTypes, IRubyObject... args) { if ( ! paramTypes.isVarArgs() ) return false; // bail out if this is not a varargs method final Class[] types = paramTypes.getParameterTypes(); // if there's no args, we only match when there's just varargs if ( args.length == 0 ) return types.length <= 1; final int last = types.length - 1; if ( args.length < last ) return false; // can't match - paramTypes method is not usable! for ( int i = 0; i < last; i++ ) { // first check non-vararg argument types match if (!(ASSIGNABLE.match(types[i], args[i]) || PRIMITIVABLE.match(types[i], args[i]))) { return false; } } final Class varArgType = types[last].getComponentType(); // dig out as many trailing args as will fit, ensuring they match varargs type for ( int i = last; i < args.length; i++ ) { if (!(ASSIGNABLE.match(varArgType, args[i]) || PRIMITIVABLE.match(varArgType, args[i]))) { return false; } } return true; }
public static Object[] convertArguments(final ParameterTypes method, final IRubyObject[] args, final int addSpace) { final Class<?>[] paramTypes = method.getParameterTypes(); final Object[] javaArgs; final int len = args.length; if ( method.isVarArgs() ) { final int last = paramTypes.length - 1; javaArgs = new Object[ last + 1 + addSpace ]; for ( int i = 0; i < last; i++ ) { javaArgs[i] = args[i].toJava(paramTypes[i]); } javaArgs[ last ] = convertVarArgumentsOnly(paramTypes[ last ], last, args); } else { javaArgs = new Object[ len + addSpace ]; for ( int i = 0; i < len; i++ ) { javaArgs[i] = args[i].toJava(paramTypes[i]); } } return javaArgs; }
public static Object[] convertArguments(final ParameterTypes method, final IRubyObject[] args, final int addSpace) { final Class<?>[] paramTypes = method.getParameterTypes(); final Object[] javaArgs; final int len = args.length; if ( method.isVarArgs() ) { final int last = paramTypes.length - 1; javaArgs = new Object[ last + 1 + addSpace ]; for ( int i = 0; i < last; i++ ) { javaArgs[i] = args[i].toJava(paramTypes[i]); } javaArgs[ last ] = convertVarArgumentsOnly(paramTypes[ last ], last, args); } else { javaArgs = new Object[ len + addSpace ]; for ( int i = 0; i < len; i++ ) { javaArgs[i] = args[i].toJava(paramTypes[i]); } } return javaArgs; }