public static ReflectionMatcher<FluentMember> canBeCalledWithArguments(final Object ... args) {
        final List<Matcher<? super FluentClass<?>>> types = new ArrayList<Matcher<? super FluentClass<?>>>();
        for (final Object object : args) {
            if(object == null) {
                types.add(anyFluentType());
            } else {
                final FluentClass<? extends Object> argumentType = type(object.getClass());
                if(argumentType.isPrimitive()) {
                    types.add(assignableFrom(argumentType).or(assignableFrom(argumentType.boxedType())));
                } else if(argumentType.isUnboxable()) {
                    types.add(assignableFrom(argumentType).or(assignableFrom(argumentType.unboxedType())));
                } else {
                    types.add(assignableFrom(argumentType));
                }
            }
        }
        return hasArgumentListMatching(types);
    }