container/src/main/java/com/streamsets/datacollector/definition/ConfigDefinitionExtractor.java
private boolean detectCycle(LinkedHashSet<String> dependencyAncestors, Set<String> cycles, final String child) {
    if (dependencyAncestors.contains(child)) {
      // Find index of the child in the ancestors list
      int index = -1;
      for (String s : dependencyAncestors) {
        index++;
        if (s.equals(child)) {
          break;
        }
      }
      // The cycle starts from the first time the child is seen in the ancestors list
      // and continues till the end of the list, followed by the child again.
      cycles.add(Joiner.on(" -> ").join(Iterables.skip(dependencyAncestors, index)) + " -> " + child);
      return true;
    }
    return false;
  }
private boolean detectCycle(LinkedHashSet<String> dependencyAncestors, Set<String> cycles, final String child) {
    if (dependencyAncestors.contains(child)) {
      // Find index of the child in the ancestors list
      int index = -1;
      for (String s : dependencyAncestors) {
        index++;
        if (s.equals(child)) {
          break;
        }
      }
      // The cycle starts from the first time the child is seen in the ancestors list
      // and continues till the end of the list, followed by the child again.
      cycles.add(Joiner.on(" -> ").join(Iterables.skip(dependencyAncestors, index)) + " -> " + child);
      return true;
    }
    return false;
  }
Returns true if child creates a dependency with any member(s) of dependencyAncestors.
Also adds the stringified cycle to the cycles list