private <T extends FrameworkMember<T>> void addToAnnotationLists(T member, Map<Class<?>, List<T>> map) { for (Annotation each : member.getAnnotations()) { Class<? extends Annotation> type = each.annotationType(); List<T> members = getAnnotatedMembers(map, type); if (member.isShadowedBy(members)) { return; } if (runsTopToBottom(type)) { members.add(0, member); } else { members.add(member); } } }
public ValidationError(FrameworkMember<?> member, Class<? extends Annotation> annotation, String suffix) { super(String.format("The @%s '%s' %s", annotation.getSimpleName(), member.getName(), suffix)); } }
private static boolean isMethodRule(FrameworkMember<?> member) { return MethodRule.class.isAssignableFrom(member.getType()); }
/** * Check if this member is shadowed by any of the given members. If it * is, the other member is removed. * * @return member that should be used, or {@code null} if no member should be used. */ final T handlePossibleShadowedMember(List<T> members) { for (int i = members.size() - 1; i >=0; i--) { T otherMember = members.get(i); if (isShadowedBy(otherMember)) { if (otherMember.isBridgeMethod()) { /* * We need to return the previously-encountered bridge method * because JUnit won't be able to call the parent method, * because the parent class isn't public. */ members.remove(i); return otherMember; } // We found a shadowed member that isn't a bridge method. Ignore it. return null; } } // No shadow or bridge method found. The caller should add *this* member. return self(); }
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)); } } }
protected static <T extends FrameworkMember<T>> void addToAnnotationLists(T member, Map<Class<? extends Annotation>, List<T>> map) { for (Annotation each : member.getAnnotations()) { Class<? extends Annotation> type = each.annotationType(); List<T> members = getAnnotatedMembers(map, type, true); T memberToAdd = member.handlePossibleShadowedMember(members); if (memberToAdd == null) { return; } if (runsTopToBottom(type)) { members.add(0, memberToAdd); } else { members.add(memberToAdd); } } }
public void validate(FrameworkMember<?> member, Class<? extends Annotation> annotation, List<Throwable> errors) { if (!member.isPublic()) { errors.add(new ValidationError(member, annotation, "must be public.")); } } }
public void validate(FrameworkMember<?> member, Class<? extends Annotation> annotation, List<Throwable> errors) { if (!member.isStatic()) { errors.add(new ValidationError(member, annotation, "must be static.")); } } }
boolean isShadowedBy(List<T> members) { for (T each : members) { if (isShadowedBy(each)) { return true; } } return false; }
/** * Returns true if this member is static, false if not. */ public boolean isStatic() { return Modifier.isStatic(getModifiers()); }
private boolean isDeclaringClassPublic(FrameworkMember<?> member) { return Modifier.isPublic(member.getDeclaringClass().getModifiers()); } }
public void accept(FrameworkMember member, T value) { Rule rule = member.getAnnotation(Rule.class); if (rule != null) { RuleContainer container = CURRENT_RULE_CONTAINER.get(); if (container != null) { container.setOrder(value, rule.order()); } } result.add(value); } }
private void validatePublic(FrameworkMember<?> member, List<Throwable> errors) { if (!member.isPublic()) { addError(errors, member, "must be public."); } }
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)); } } }
boolean isShadowedBy(List<T> members) { for (T each : members) { if (isShadowedBy(each)) { return true; } } return false; }
/** * Returns true if this member is public, false if not. */ public boolean isPublic() { return Modifier.isPublic(getModifiers()); }
private boolean isDeclaringClassPublic(FrameworkMember<?> member) { return Modifier.isPublic(member.getDeclaringClass().getModifiers()); } }
public void accept(FrameworkMember member, TestRule value) { ClassRule rule = member.getAnnotation(ClassRule.class); entries.add(new RuleContainer.RuleEntry(value, RuleContainer.RuleEntry.TYPE_TEST_RULE, rule != null ? rule.order() : null)); }
private <T extends FrameworkMember<T>> void addToAnnotationLists(T member, Map<Class<?>, List<T>> map) { for (Annotation each : member.getAnnotations()) { Class<? extends Annotation> type = each.annotationType(); List<T> members = getAnnotatedMembers(map, type); if (member.isShadowedBy(members)) { return; } if (runsTopToBottom(type)) { members.add(0, member); } else { members.add(member); } } }