001    package org.junit.runner;
002    
003    import static java.util.Collections.emptyList;
004    import static java.util.Collections.singletonList;
005    
006    import java.util.List;
007    
008    import org.junit.FixMethodOrder;
009    import org.junit.runners.model.TestClass;
010    import org.junit.validator.AnnotationValidator;
011    
012    /**
013     * Validates that there are no errors in the use of the {@code OrderWith}
014     * annotation. If there is, a {@code Throwable} object will be added to the list
015     * of errors.
016     *
017     * @since 4.13
018     */
019    public final class OrderWithValidator extends AnnotationValidator {
020    
021        /**
022         * Adds to {@code errors} a throwable for each problem detected. Looks for
023         * {@code FixMethodOrder} annotations.
024         *
025         * @param testClass that is being validated
026         * @return A list of exceptions detected
027         *
028         * @since 4.13
029         */
030        @Override
031        public List<Exception> validateAnnotatedClass(TestClass testClass) {
032            if (testClass.getAnnotation(FixMethodOrder.class) != null) {
033                return singletonList(
034                        new Exception("@FixMethodOrder cannot be combined with @OrderWith"));
035            }
036            return emptyList();
037        }
038    }