code: @Override
      public JsonToken nextToken() throws IOException {
          if (nextToken != null) {
              _currToken = nextToken;
              nextToken = null;
              return _currToken;
          }
          // are we to descend to a container child?
          if (startContainer) {
              startContainer = false;
              // minor optimization: empty containers can be skipped
              if (!nodeCursor.currentHasChildren()) {
                  _currToken = (_currToken == JsonToken.START_OBJECT) ?
                          JsonToken.END_OBJECT : JsonToken.END_ARRAY;
                  return _currToken;
              }
              nodeCursor = nodeCursor.iterateChildren();
              _currToken = nodeCursor.nextToken();
              if (_currToken == JsonToken.START_OBJECT || _currToken == JsonToken.START_ARRAY) {
                  startContainer = true;
              }
              return _currToken;
          }
          // No more content?
          if (nodeCursor == null) {
              closed = true; // if not already set
              return null;
          }
          // Otherwise, next entry from currentFieldName cursor
          _currToken = nodeCursor.nextToken();
          if (_currToken != null) {
              if (_currToken == JsonToken.START_OBJECT || _currToken == JsonToken.START_ARRAY) {
                  startContainer = true;
              }
              return _currToken;
          }
          // null means no more children; need to return end marker
          _currToken = nodeCursor.endToken();
          nodeCursor = nodeCursor.getParent();
          return _currToken;
      }
docs: /*
  ********************************************************
  /* Public API, traversal
  ********************************************************