resolve method

List<IModuleCodeContributor> resolve(
  1. List<IModuleCodeContributor> selectedModules
)

Returns a list where dependencies appear before dependents using only the provided module instances.

Implementation

List<IModuleCodeContributor> resolve(
  List<IModuleCodeContributor> selectedModules,
) {
  final byName = {
    for (final m in selectedModules) m.moduleDescriptor.name: m,
  };

  final visited = <String>{};
  final sorted = <IModuleCodeContributor>[];

  void visit(String name) {
    if (visited.contains(name)) return;

    final module = byName[name];
    if (module == null) return;

    for (final dep in module.moduleDescriptor.dependsOn) {
      visit(dep);
    }

    visited.add(name);
    sorted.add(module);
  }

  for (final module in selectedModules) {
    visit(module.moduleDescriptor.name);
  }

  return sorted;
}