报告递归方法中 VirtualFile.getChildren() 的用法。

对循环符号链接迭代时,这可能导致无限循环。 请改用 VfsUtilCore.visitChildrenRecursively()


void processDirectory(VirtualFile dir) {
  for (VirtualFile file : dir.getChildren()) { // 错误
    if (!file.isDirectory()) {
      processFile(file);
    } else {
      processDirectory(file); // 递归调用
    }
  }
}


void processDirectory(VirtualFile dir) {
  VfsUtilCore.visitChildrenRecursively(dir, new VirtualFileVisitor<Void>() { // 正确
    @Override
    public boolean visitFile(@NotNull VirtualFile file) {
      if (!file.isDirectory()) {
        processFile(file);
      }
      return true;
    }
  });
}