1212
1313import java .util .ArrayDeque ;
1414import java .util .HashSet ;
15+ import java .util .Optional ;
1516import java .util .Queue ;
1617import java .util .Set ;
17- import java .util .ArrayList ;
1818
1919import org .junit .platform .commons .util .Preconditions ;
2020import org .junit .platform .engine .TestDescriptor ;
@@ -38,31 +38,31 @@ void validate(TestEngine testEngine, TestDescriptor root) {
3838 () -> String .format (
3939 "The discover() method for TestEngine with ID '%s' must return a non-null root TestDescriptor." ,
4040 testEngine .getId ()));
41- ArrayList <UniqueId > cyclicUIDs = getCyclicUIDs (root );
42- Preconditions .condition (cyclicUIDs .isEmpty (),
41+ Optional <UniqueId > cyclicUIDs = getFirstCyclicUID (root );
42+ Preconditions .condition (! cyclicUIDs .isPresent (),
4343 () -> String .format ("The discover() method for TestEngine with ID '%s' returned a cyclic graph: "
44- + "Unique ID(s) '%s' enter a cycle " ,
44+ + "Cycle found at unique ID '%s'" ,
4545 testEngine .getId (), cyclicUIDs ));
4646 }
4747
4848 /**
4949 * @return {@code true} if the tree does <em>not</em> contain a cycle; else {@code false}.
5050 */
5151 boolean isAcyclic (TestDescriptor root ) {
52- return getCyclicUIDs (root ).isEmpty ();
52+ return ! getFirstCyclicUID (root ).isPresent ();
5353 }
5454
55- ArrayList <UniqueId > getCyclicUIDs (TestDescriptor root ) {
55+ Optional <UniqueId > getFirstCyclicUID (TestDescriptor root ) {
5656 Set <UniqueId > visited = new HashSet <>();
57- ArrayList <UniqueId > cyclic = new ArrayList <> ();
57+ Optional <UniqueId > cyclic = Optional . empty ();
5858 visited .add (root .getUniqueId ());
5959 Queue <TestDescriptor > queue = new ArrayDeque <>();
6060 queue .add (root );
6161 while (!queue .isEmpty ()) {
6262 for (TestDescriptor child : queue .remove ().getChildren ()) {
6363 UniqueId uid = child .getUniqueId ();
6464 if (!visited .add (uid )) {
65- cyclic . add (uid );
65+ cyclic = Optional . of (uid );
6666 return cyclic ; // id already known: cycle detected!
6767 }
6868 if (child .isContainer ()) {
0 commit comments