private static @NotNull MappedFileTypeIndex.IndexDataController loadIndexToMemory(@NotNull Path forwardIndexStorageFile,
                                                                                    @NotNull IntConsumer invertedIndexChangeCallback)
    throws StorageException {
    final IndexDataController.ForwardIndexFileController forwardIndex;
    if (FORWARD_INDEX_OVER_MMAPPED_ATTRIBUTE) {
      forwardIndex = new ForwardIndexFileControllerOverMappedFile(
        // TODO put this piece in the constructor after OverFile implementation is removed
        forwardIndexStorageFile.resolveSibling(forwardIndexStorageFile.getFileName().toString() + ".mmap")
      );
    }
    else {
      forwardIndex = new ForwardIndexFileControllerOverFile(forwardIndexStorageFile);
    }
    Int2ObjectMap<RandomAccessIntContainer> invertedIndex = new Int2ObjectOpenHashMap<>();
    forwardIndex.processEntries((inputId, data) -> {
      if (data != 0) {
        invertedIndex.computeIfAbsent(data, __ -> createContainerForInvertedIndex()).add(inputId);
      }
    });
    return new IndexDataController(invertedIndex, forwardIndex, invertedIndexChangeCallback);
  }
private static @NotNull MappedFileTypeIndex.IndexDataController loadIndexToMemory(@NotNull Path forwardIndexStorageFile,
                                                                                    @NotNull IntConsumer invertedIndexChangeCallback)