private function sortModulesDFS($currentName, array &$namesToSort, array &$output)
{
unset($namesToSort[$currentName]);
// Before adding the module itself to the path, add all predecessors.
// Do so recursively, then we make sure that each module is visited
// in the path before any of its successors.
foreach ($this->dependencies[$currentName] as $predecessor => $_) {
// The module was already processed. Either the module is on the
// path already, then we're good. Otherwise, we have a cycle.
// However, addEdge() guarantees that the graph is cycle-free.
if (isset($namesToSort[$predecessor])) {
$this->sortModulesDFS($predecessor, $namesToSort, $output);
}
}
$output[] = $currentName;
}