private <T> boolean genericThat(T actual, Matcher<? super T> matcher, Object category, String reason, Object... messageParameters) {
if (!matcher.matches(actual)) {
if (reason != null) {
errors.add(i18nMessage(category, reason, messageParameters));
} else {
Description description = new ResourceBundleDescription();
description.appendDescriptionOf(matcher);
errors.add(i18nMessage(category, description.toString(), actual));
}
return false;
}
return true;
}