getFirstInjectorWhere method

AutoInjectorImpl? getFirstInjectorWhere(
  1. AutoInjectorImpl startInjector,
  2. bool validation(
    1. AutoInjectorImpl
    )
)

Returns the first injector that pass in the validation.

NOTE: Algorithm based on BFS (breadth-first search)

Implementation

AutoInjectorImpl? getFirstInjectorWhere(
  AutoInjectorImpl startInjector,
  bool Function(AutoInjectorImpl) validation,
) {
  final visited = <AutoInjectorImpl>{};
  final queue = Queue<AutoInjectorImpl>();
  queue.add(startInjector);

  while (queue.isNotEmpty) {
    final currentInjector = queue.removeFirst();
    if (validation(currentInjector)) {
      return currentInjector;
    }

    if (adjacencyList[currentInjector] == null) continue;

    for (final adjacentInjector in adjacencyList[currentInjector]!) {
      if (!visited.contains(adjacentInjector)) {
        visited.add(adjacentInjector);
        queue.add(adjacentInjector);
      }
    }
  }
  return null;
}