anchor.diff:    const NoChange();
   
     @override
  -  EditPlan apply(AstNode node, EditPlan Function(AstNode) gather) {
  -    return gather(node);
  +  EditPlan apply(AstNode node, FixAggregator aggregator) {
  +    return aggregator.innerPlanForNode(node);
     }
   }
   
  
positive.code: 
    FixAggregator._(this._changes);
  
    @override
    void visitNode(AstNode node) {
      var change = _changes[node];
      if (change != null) {
        var innerPlan = change.apply(node, _gather);
        if (innerPlan != null) {
          _plans.add(innerPlan);
        }
      } else {
        node.visitChildren(this);
      }
    }
  
    /// Gathers all the changes to nodes descended from [node] into a single
    /// [EditPlan].
    EditPlan _gather(AstNode node) {
      var previousPlans = _plans;
      try {
        _plans = [];
  
negative.code:   const MakeNullable([NodeChange inner = const NoChange()]) : super(inner);
  
    @override
    EditPlan apply(AstNode node, FixAggregator aggregator) {
      var innerPlan = _inner.apply(node, aggregator);
      return EditPlan.surround(innerPlan, suffix: [const InsertText('?')]);
    }
  }
  