anchor.diff:        case _Field.PhaseNumber:
           return generatedNode.phaseNumber;
         case _Field.Globs:
  -        return generatedNode.globs.map((glob) => glob.pattern).toList();
  +        return generatedNode.globs
  +            .map((glob) => glob.pattern)
  +            .toList(growable: false);
         case _Field.NeedsUpdate:
           return _serializeBool(generatedNode.needsUpdate);
         case _Field.PreviousInputsDigest:
  
positive.code:     var graph = new AssetGraph._(
          _deserializeDigest(_serializedGraph['buildActionsDigest'] as String));
  
      // Read in the id => AssetId map from the graph first.
      for (var descriptor in _serializedGraph['serializedAssetIds']) {
        _idToAssetId[descriptor[0] as int] =
            new AssetId(descriptor[1] as String, descriptor[2] as String);
      }
  
      // Read in all the nodes and their outputs.
  
negative.code: 
    /// Perform the serialization, should only be called once.
    List<int> serialize() {
      var pathId = 0;
      // [path0, packageId0, path1, packageId1, ...]
      var assetPaths = <dynamic>[];
      var packages = _graph._nodesByPackage.keys.toList(growable: false);
      for (var node in _graph.allNodes) {
        _assetIdToId[node.id] = pathId;
        pathId++;
        assetPaths.add(node.id.path);
        assetPaths.add(packages.indexOf(node.id.package));
      }
  
      var result = <String, dynamic>{
        'version': _version,
        'nodes': _graph.allNodes.map(_serializeNode).toList(growable: false),
        'buildActionsDigest': _serializeDigest(_graph.buildActionsDigest),
        'packages': packages,
        'assetPaths': assetPaths,
      };
      return UTF8.encode(JSON.encode(result));
    }
  
  