docs: private static <T, N extends IntervalTreeNode<T, N>> void searchMtasTreeWithIntervalTree(
        Collection<Integer> additionalIds, IntervalItem<T, N> checkItem,
        IndexInput in, AtomicBoolean isSinglePoint,
        AtomicBoolean isStoreAdditionalId, long objectRefApproxOffset,
        AtomicLong nodeRefApproxOffset, ArrayList<IntervalItem<T, N>> checkList)
        throws IOException {
      MtasTreeItem treeItem = checkItem.mtasTreeItem;
      IntervalTreeNode<T, N> intervalTreeNode = checkItem.intervalTreeNode;
      if (intervalTreeNode.min <= treeItem.max) {
        // advance intervalTree
        while (intervalTreeNode.left > treeItem.max) {
          if (intervalTreeNode.rightChild == null) {
            if (intervalTreeNode.leftChild == null) {
              return;
            } else {
              intervalTreeNode = intervalTreeNode.leftChild;
            }
          } else if (intervalTreeNode.leftChild == null) {
            intervalTreeNode = intervalTreeNode.rightChild;
          } else {
            if (intervalTreeNode.rightChild.min > treeItem.max) {
              intervalTreeNode = intervalTreeNode.leftChild;
            } else {
              break;
            }
          }
        }
        // find intervals matching current node
        searchMtasTreeItemWithIntervalTree(additionalIds, treeItem,
            intervalTreeNode);
        // check leftChild
        if (!treeItem.leftChild.equals(treeItem.ref)) {
          MtasTreeItem treeItemLeft = getMtasTreeItem(treeItem.leftChild,
              isSinglePoint, isStoreAdditionalId, nodeRefApproxOffset, in,
              objectRefApproxOffset);
          checkList.add(new IntervalItem<T, N>(treeItemLeft, intervalTreeNode));
        }
        // check rightChild
        if (!treeItem.rightChild.equals(treeItem.ref)) {
          MtasTreeItem treeItemRight = getMtasTreeItem(treeItem.rightChild,
              isSinglePoint, isStoreAdditionalId, nodeRefApproxOffset, in,
              objectRefApproxOffset);
          checkList.add(new IntervalItem<T, N>(treeItemRight, intervalTreeNode));
        }
      }
    }