@Override
  public boolean addAll(@NotNull Collection<? extends VirtualFile> c) {
    if (frozen) {
      throw new IllegalStateException();
    }
    if (c instanceof CompactVirtualFileSet) {
      boolean modified = false;
      CompactVirtualFileSet setToAdd = (CompactVirtualFileSet)c;
      for (VirtualFile file : setToAdd.weirdFiles) {
        if (add(file)) {
          modified = true;
        }
      }

      IntIterator toAdd;
      if (setToAdd.idSet != null) {
        toAdd = setToAdd.idSet.intIterator();
      }
      else if (setToAdd.fileIds != null) {
        toAdd = IntIterators.asIntIterator(setToAdd.fileIds.stream().iterator());
      }
      else {
        return modified;
      }

      while (toAdd.hasNext()) {
        int id = toAdd.nextInt();

        if (fileIds == null && idSet == null) {
          convertToIntSet();
        }

        if (fileIds != null) {
          modified = !fileIds.get(id);
          fileIds.set(id);
        }
        else if (idSet != null) {
          modified = idSet.add(id);
          if (idSet.size() > BIT_SET_LIMIT) {
            convertToBitSet();
          }
        }
        else {
          throw new IllegalStateException();
        }
      }

      return modified;
    }
    else {
      return super.addAll(c);
    }
  }
@Override
  public boolean addAll(@NotNull Collection<? extends VirtualFile> c)