sortByBuildOrder<T> method

List<T> sortByBuildOrder<T>(
  1. List<T> folders,
  2. String getPath(
    1. T
    ),
  3. List<String> globalOrder
)

Sort folders by dependency order (for project traversal).

Uses a pre-computed global build order to sort the filtered contexts. globalOrder contains all project paths in dependency-first order, computed from the full unfiltered scan.

Folders present in globalOrder appear first (in dependency order), followed by folders not in the order (e.g., non-Dart projects).

Implementation

List<T> sortByBuildOrder<T>(
  List<T> folders,
  String Function(T) getPath,
  List<String> globalOrder,
) {
  if (globalOrder.isEmpty) return folders;

  // Build position map for O(1) lookup
  final positionMap = <String, int>{};
  for (var i = 0; i < globalOrder.length; i++) {
    positionMap[globalOrder[i]] = i;
  }

  final sorted = List<T>.from(folders);
  sorted.sort((a, b) {
    final posA = positionMap[getPath(a)];
    final posB = positionMap[getPath(b)];

    // Both in order → sort by position
    if (posA != null && posB != null) return posA.compareTo(posB);
    // Only one in order → it comes first
    if (posA != null) return -1;
    if (posB != null) return 1;
    // Neither in order → preserve relative order (stable sort)
    return 0;
  });

  return sorted;
}