docs: protected final MtasDataCollector add(boolean increaseSourceNumber)
        throws IOException {
      if (!closed) {
        if (!collectorType.equals(DataCollector.COLLECTOR_TYPE_DATA)) {
          throw new IOException(
              "collector should be " + DataCollector.COLLECTOR_TYPE_DATA);
        } else {
          if (newPosition > 0) {
            newCurrentExisting = true;
          } else if (position < getSize()) {
            // copy
            newKeyList[0] = keyList[0];
            newSourceNumberList[0] = sourceNumberList[0];
            if (increaseSourceNumber) {
              newSourceNumberList[0]++;
            }
            newErrorNumber[0] = errorNumber[0];
            newErrorList[0] = errorList[0];
            if (hasSub) {
              newSubCollectorNextLevel = subCollectorNextLevel;
            }
            copyToNew(0, 0);
            newPosition = 1;
            position = 1;
            newCurrentExisting = true;
          } else {
            // add key
            newKeyList[0] = DataCollector.COLLECTOR_TYPE_DATA;
            newSourceNumberList[0] = 1;
            newErrorNumber[0] = 0;
            newErrorList[0] = new HashMap<>();
            newPosition = 1;
            newCurrentPosition = newPosition - 1;
            newCurrentExisting = false;
            // ready, only handle sub
            if (hasSub) {
              newSubCollectorNextLevel = DataCollector.getCollector(
                  subCollectorTypes[0], subDataTypes[0], subStatsTypes[0],
                  subStatsItems[0], subSortTypes[0], subSortDirections[0],
                  subStart[0], subNumber[0], newSubCollectorTypes,
                  newSubDataTypes, newSubStatsTypes, newSubStatsItems,
                  newSubSortTypes, newSubSortDirections, newSubStart,
                  newSubNumber, segmentRegistration, null);
            } else {
              newSubCollectorNextLevel = null;
            }
          }
          return newSubCollectorNextLevel;
        }
      } else {
        throw new IOException("already closed");
      }
    }