private static List<Object> getTypeMatchingValuesInOrderOf(Class<?>[] expectedClasses, List<Object> values) {
        List<Object> valuesCopy = Lists.newArrayList(values);
        List<Object> result = new ArrayList<>();
        for (Class<?> argumentClass : expectedClasses) {
            for (Iterator<Object> iterator = valuesCopy.iterator(); iterator.hasNext(); ) {
                Object value = iterator.next();
                if (Primitives.wrap(argumentClass).isInstance(value)) {
                    result.add(value);
                    iterator.remove();
                    break;
                }
            }
        }
        if (result.size() < expectedClasses.length) {
            log.warn(format("Couldn't find matching values in '%s' for expected classes '%s',", valuesCopy,
                    Arrays.toString(expectedClasses)));
        }
        return result;
    }
Searches for all arguments of the given {@link Parameterized} test class by retrieving the values of all
non-static instance fields and comparing their types with the constructor arguments. The order of resulting
parameters corresponds to the order of the constructor argument types (which is equal to order of the provided
data of the method annotated with {@link Parameterized}). If the constructor contains multiple arguments of the same
type, the order of {@link ReflectionUtil#getAllNonStaticFieldValuesFrom(Class, Object, String)} is used.

@param constructor {@link Constructor} from which argument types should be retrieved
@param target      {@link Parameterized} test instance from which arguments tried to be retrieved
@return the determined arguments, never {@code null}
jgiven-junit/src/main/java/com/tngtech/jgiven/junit/JGivenMethodRule.java