private void createImplementation() throws IOException {
    try {
      if (!myIsDelta) {
        myContext = new DependencyContext(myRootDir, myRelativizer);
        myDebugS = myContext.getLogger(LOG);
      }

      myRemovedSuperClasses = myIsDelta ? new IntIntTransientMultiMaplet() : null;
      myAddedSuperClasses = myIsDelta ? new IntIntTransientMultiMaplet() : null;

      final Supplier<Collection<String>> fileCollectionFactory = CollectionFactory::createFilePathSet;
      if (myIsDelta) {
        myClassToSubclasses = new IntIntTransientMultiMaplet();
        myClassToClassDependency = new IntIntTransientMultiMaplet();
        myShortClassNameIndex = null;
        myRelativeSourceFilePathToClasses = new ObjectObjectTransientMultiMaplet<>(
          FastUtilHashingStrategies.FILE_PATH_HASH_STRATEGY, () -> new HashSet<>(5, DEFAULT_SET_LOAD_FACTOR)
        );
        myClassToRelativeSourceFilePath = new IntObjectTransientMultiMaplet<>(fileCollectionFactory);
      }
      else {
        myClassToSubclasses = new IntIntPersistentMultiMaplet(
          DependencyContext.getTableFile(myRootDir, CLASS_TO_SUBCLASSES), EnumeratorIntegerDescriptor.INSTANCE
        );
        if (USE_NATURAL_INT_MULTIMAP_IMPLEMENTATION) {
          myClassToClassDependency = new NaturalIntIntPersistentMultiMaplet(
            DependencyContext.getTableFile(myRootDir, CLASS_TO_CLASS), EnumeratorIntegerDescriptor.INSTANCE
          );
        }
        else {
          myClassToClassDependency = new IntIntPersistentMultiMaplet(
            DependencyContext.getTableFile(myRootDir, CLASS_TO_CLASS), EnumeratorIntegerDescriptor.INSTANCE
          );
        }
        myShortClassNameIndex = new IntIntPersistentMultiMaplet(
          DependencyContext.getTableFile(myRootDir, SHORT_NAMES), EnumeratorIntegerDescriptor.INSTANCE
        );
        myRelativeSourceFilePathToClasses = new ObjectObjectPersistentMultiMaplet<String, ClassFileRepr>(
          DependencyContext.getTableFile(myRootDir, SOURCE_TO_CLASS), PathStringDescriptor.INSTANCE, new ClassFileReprExternalizer(myContext),
          () -> new HashSet<>(5, DEFAULT_SET_LOAD_FACTOR)
        ) {
          @Override
          protected @NotNull String debugString(String path) {
            // on case-insensitive file systems save paths in normalized (lowercase) format to make tests run deterministically
            return SystemInfo.isFileSystemCaseSensitive ? path : path.toLowerCase(Locale.US);
          }
        };
        myClassToRelativeSourceFilePath = new IntObjectPersistentMultiMaplet<>(
          DependencyContext.getTableFile(myRootDir, CLASS_TO_SOURCE), EnumeratorIntegerDescriptor.INSTANCE, PathStringDescriptor.INSTANCE, fileCollectionFactory
        );
      }
    }
    catch (Throwable e) {
      try {
        // ensure already initialized maps are properly closed
        close();
      }
      catch (Throwable ignored) {
      }
      throw e;
    }
  }
private void createImplementation()