Set _removeRecursive()

in build_runner_core/lib/src/asset_graph/graph.dart [181:219]


  Set<AssetId> _removeRecursive(AssetId id, {Set<AssetId>? removedIds}) {
    removedIds ??= <AssetId>{};
    var node = get(id);
    if (node == null) return removedIds;
    removedIds.add(id);
    for (var anchor in node.anchorOutputs.toList()) {
      _removeRecursive(anchor, removedIds: removedIds);
    }
    for (var output in node.primaryOutputs.toList()) {
      _removeRecursive(output, removedIds: removedIds);
    }
    for (var output in node.outputs) {
      var inputsNode = get(output) as NodeWithInputs?;
      if (inputsNode != null) {
        inputsNode.inputs.remove(id);
        if (inputsNode is GlobAssetNode) {
          inputsNode.results?.remove(id);
        }
      }
    }
    if (node is NodeWithInputs) {
      for (var input in node.inputs) {
        var inputNode = get(input);
        // We may have already removed this node entirely.
        if (inputNode != null) {
          inputNode.outputs.remove(id);
          inputNode.primaryOutputs.remove(id);
        }
      }
      if (node is GeneratedAssetNode) {
        get(node.builderOptionsId)!.outputs.remove(id);
      }
    }
    // Synthetic nodes need to be kept to retain dependency tracking.
    if (node is! SyntheticSourceAssetNode) {
      _nodesByPackage[id.package]!.remove(id.path);
    }
    return removedIds;
  }