@ApiStatus.Internal
  protected boolean iterateProvidedRootsOfContent(@NotNull ContentIterator processor,
                                                  @Nullable VirtualFileFilter filter,
                                                  @NotNull Collection<VirtualFile> topLevelRecursiveRoots,
                                                  @NotNull Collection<VirtualFile> nonRecursiveRoots) {
    ContentIteratorEx processorEx = toContentIteratorEx(processor);
    for (VirtualFile root : topLevelRecursiveRoots) {
      if (!iterateContentUnderDirectory(root, processorEx, filter)) {
        return false;
      }
    }
    for (VirtualFile root : nonRecursiveRoots) {
      if ((filter == null || filter.accept(root)) && processorEx.processFileEx(root) == TreeNodeProcessingResult.STOP) {
        return false;
      }
    }
    return true;
  }
@ApiStatus.Internal
  protected boolean iterateProvidedRootsOfContent(@NotNull ContentIterator processor,
                                                  @Nullable VirtualFileFilter filter,
                                                  @NotNull Collection<VirtualFile> topLevelRecursiveRoots,
                                                  @NotNull Collection<VirtualFile> nonRecursiveRoots)