validate method

void validate()

验证任务依赖关系,检测循环依赖

Implementation

void validate() {
  final visited = <String>{};
  final recursionStack = <String>{};

  void checkCircularDependency(String taskId) {
    if (recursionStack.contains(taskId)) {
      throw CircularDependencyException(recursionStack.toList() + [taskId]);
    }

    if (visited.contains(taskId)) return;

    visited.add(taskId);
    recursionStack.add(taskId);

    final task = _taskMap[taskId];
    if (task != null) {
      for (final depId in task.dependencies) {
        if (_taskMap.containsKey(depId)) {
          checkCircularDependency(depId);
        }
      }
    }

    recursionStack.remove(taskId);
  }

  for (final task in tasks) {
    if (!visited.contains(task.id)) {
      checkCircularDependency(task.id);
    }
  }
}