private void processProjectFilesUnder(VirtualFile root, Processor<? super VirtualFile> consumer) {
    VfsUtilCore.visitChildrenRecursively(root, new VirtualFileVisitor<Void>() {

      @Override
      public boolean visitFile(@NotNull VirtualFile file) {
        return (myService.shouldProcess(file) || myProjectFileFilter.test(file)) && consumer.process(file);
      }

      @Nullable
      @Override
      public Iterable<VirtualFile> getChildrenIterable(@NotNull VirtualFile file) {
        return file instanceof NewVirtualFile ? ((NewVirtualFile)file).getCachedChildren() : null;
      }
    });
  }
private void processProjectFilesUnder(VirtualFile root, Processor<? super VirtualFile> consumer)