private static boolean assignableAndPrimitivableWithVarargs(ParameterTypes paramTypes, IRubyObject... args) { // bail out if this is not a varargs method if (!paramTypes.isVarArgs()) return false; Class[] types = paramTypes.getParameterTypes(); Class varArgArrayType = types[types.length - 1]; Class varArgType = varArgArrayType.getComponentType(); // if there's no args, we only match when there's just varargs if (args.length == 0) { return types.length <= 1; } // dig out as many trailing args as will fit, ensuring they match varargs type int nonVarargs = types.length - 1; for (int i = args.length - 1; i >= nonVarargs; i--) { if (!(ASSIGNABLE.match(varArgType, args[i]) || PRIMITIVABLE.match(varArgType, args[i]))) { return false; } } // check remaining args for (int i = 0; i < nonVarargs; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) || PRIMITIVABLE.match(types[i], args[i]))) { return false; } } return true; }
private static boolean assignableAndPrimitivableWithVarargs(ParameterTypes paramTypes, IRubyObject... args) { // bail out if this is not a varargs method if (!paramTypes.isVarArgs()) return false; Class[] types = paramTypes.getParameterTypes(); Class varArgArrayType = types[types.length - 1]; Class varArgType = varArgArrayType.getComponentType(); // if there's no args, we only match when there's just varargs if (args.length == 0) { return types.length <= 1; } // dig out as many trailing args as will fit, ensuring they match varargs type int nonVarargs = types.length - 1; for (int i = args.length - 1; i >= nonVarargs; i--) { if (!(ASSIGNABLE.match(varArgType, args[i]) || PRIMITIVABLE.match(varArgType, args[i]))) { return false; } } // check remaining args for (int i = 0; i < nonVarargs; i++) { if (!(ASSIGNABLE.match(types[i], args[i]) || PRIMITIVABLE.match(types[i], args[i]))) { return false; } } return true; }
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; }
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 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; }
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) { 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 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 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 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 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 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 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 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 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 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 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; }