private static List<VirtualFile> impl(final Iterator<FilePath> iterator) {
    final MyProcessor processor = new MyProcessor();

    for (; iterator.hasNext(); ) {
      final FilePath root = iterator.next();
      final VirtualFile vf = root.getVirtualFile();
      if (vf == null) continue;
      VfsUtil.processFilesRecursively(vf, processor, processor);
    }
    return processor.getFound();
  }
 public static void processFileRecursivelyWithoutIgnored(
     @NotNull final VirtualFile root, @NotNull final Processor<VirtualFile> processor) {
   final FileTypeManager ftm = FileTypeManager.getInstance();
   processFilesRecursively(
       root,
       processor,
       new Convertor<VirtualFile, Boolean>() {
         public Boolean convert(final VirtualFile vf) {
           return !ftm.isFileIgnored(vf);
         }
       });
 }
 private static void visitAllChildrenRecursively(@Nullable VirtualFile dir) {
   if (dir == null) {
     return;
   }
   VfsUtil.processFilesRecursively(
       dir,
       new Processor<VirtualFile>() {
         @Override
         public boolean process(VirtualFile virtualFile) {
           return true;
         }
       });
 }
 @Override
 public void getChanges(
     VcsDirtyScope dirtyScope,
     final ChangelistBuilder builder,
     ProgressIndicator progress,
     ChangeListManagerGate addGate)
     throws VcsException {
   for (FilePath path : dirtyScope.getDirtyFiles()) {
     builder.processUnversionedFile(path.getVirtualFile());
   }
   final Processor<VirtualFile> processor =
       new Processor<VirtualFile>() {
         @Override
         public boolean process(final VirtualFile vf) {
           builder.processUnversionedFile(vf);
           return true;
         }
       };
   for (FilePath dir : dirtyScope.getRecursivelyDirtyDirectories()) {
     VfsUtil.processFilesRecursively(dir.getVirtualFile(), processor);
   }
 }