buildScope method

void buildScope()

Rebuilds all dirty elements in maintained-depth order under a reentrancy guard. Performs zero Element parent walks.

Implementation

void buildScope() {
  if (_building) {
    throw StateError('BuildOwner.buildScope cannot be re-entered');
  }
  _building = true;
  try {
    while (!_pendingBuckets.isEmpty) {
      final batch = _pendingBuckets;
      _pendingBuckets = _DirtyBuckets();
      for (final dirty in batch.entriesInOrder()) {
        final element = dirty.element;
        final reservation = _dirtyReservations[element];
        if (reservation == null ||
            reservation.generation != dirty.generation) {
          // Stale: cascade rebuild, rebucket, or clearDirty already won.
          continue;
        }
        _dirtyReservations.remove(element);
        if (!element.active) {
          continue;
        }
        element.rebuild();
      }
    }
    finalizeTree();
  } finally {
    _building = false;
  }
}