public Content next()

in sources/java-incremental-compilation/jvm-inc-builder/src/com/intellij/tools/build/bazel/org/jdom/DescendantIterator.java [136:183]


  public Content next() {
    // set the 'current' if it needs changing.
    if (descending != null) {
      current = descending;
      descending = null;
    }
    else if (ascending != null) {
      current = ascending;
      ascending = null;
    }

    final Content ret = current.next();

    // got an item to return.
    // sort out the next state....
    if ((ret instanceof Element) && ((Element)ret).getContentSize() > 0) {
      // there is another descendant, and it has values.
      // our next will be down....
      descending = ((Element)ret).getContent().iterator();
      if (ssize >= stack.length) {
        stack = Arrays.copyOf(stack, ssize + 16);
      }
      stack[ssize++] = current;
      return ret;
    }

    if (current.hasNext()) {
      // our next will be along....
      return ret;
    }

    // our next will be up.
    while (ssize > 0) {

      // if the stack was generic, this would not be needed, but,
      // the java.uti.* stack codes are too slow.
      @SuppressWarnings("unchecked") final Iterator<Content> subit = (Iterator<Content>)stack[--ssize];
      ascending = subit;
      stack[ssize] = null;
      if (ascending.hasNext()) {
        return ret;
      }
    }

    ascending = null;
    hasnext = false;
    return ret;
  }