in src/main/java/org/junit/internal/runners/rules/RuleMemberValidator.java [167:185]
public void validate(FrameworkMember<?> member, Class<? extends Annotation> annotation, List<Throwable> errors) {
boolean isMethodRuleMember = isMethodRule(member);
boolean isClassRuleAnnotated = (member.getAnnotation(ClassRule.class) != null);
// We disallow:
// - static MethodRule members
// - static @Rule annotated members
// - UNLESS they're also @ClassRule annotated
// Note that MethodRule cannot be annotated with @ClassRule
if (member.isStatic() && (isMethodRuleMember || !isClassRuleAnnotated)) {
String message;
if (isMethodRule(member)) {
message = "must not be static.";
} else {
message = "must not be static or it must be annotated with @ClassRule.";
}
errors.add(new ValidationError(member, annotation, message));
}
}