debugHierarchy static method

String debugHierarchy()

Implementation

static String debugHierarchy() {
  if (_persistentScopes.isEmpty && _autoDisposeScopes.isEmpty) {
    return 'No scopes being tracked';
  }

  final buffer = StringBuffer();
  buffer.writeln('🏗️ Scope Hierarchy:');

  if (_persistentScopes.isNotEmpty) {
    buffer.writeln('🔒 Persistent Scopes (${_persistentScopes.length}):');
    for (final entry in _persistentScopes.entries) {
      final childCount = _childScopes[entry.key]?.length ?? 0;
      final autoDisposeChildCount =
          _activeAutoDisposeChildren[entry.key]?.length ?? 0;
      final parent = _parentScopes[entry.key] ?? 'root';
      final depCount = entry.value.getAllDependencies().length;
      final isExplicit = _explicitlyPersistentScopes.contains(entry.key);

      buffer.writeln(
          '  📦 ${entry.key} ${isExplicit ? '(explicit)' : '(implicit)'}');
      buffer.writeln('     ├─ Parent: $parent');
      buffer.writeln('     ├─ Dependencies: $depCount');
      buffer.writeln('     ├─ Persistent children: $childCount');
      buffer.writeln('     └─ Auto-dispose children: $autoDisposeChildCount');
    }
  }

  if (_autoDisposeScopes.isNotEmpty) {
    buffer.writeln('⚡ Auto-Dispose Scopes (${_autoDisposeScopes.length}):');
    for (final entry in _autoDisposeScopes.entries) {
      final parent = _parentScopes[entry.key] ?? 'root';
      final depCount = entry.value.getAllDependencies().length;

      buffer.writeln('  ⚡ ${entry.key}');
      buffer.writeln('     ├─ Parent: $parent');
      buffer.writeln('     └─ Dependencies: $depCount');
    }
  }

  return buffer.toString();
}