anchor.diff:  
   class _StreamSinkImpl<T> implements StreamSink<T> {
     final StreamConsumer<T> _target;
  -  Completer _doneCompleter = new Completer();
  -  Future _doneFuture;
  +  final Completer _doneCompleter = new Completer();
     StreamController<T> _controllerInstance;
     Completer _controllerCompleter;
     bool _isClosed = false;
     bool _isBound = false;
     bool _hasError = false;
   
  -  _StreamSinkImpl(this._target) {
  -    _doneFuture = _doneCompleter.future;
  -  }
  +  _StreamSinkImpl(this._target);
   
     void add(T data) {
       if (_isClosed) return;
  
positive.code:     _target.close().then(_completeDoneValue, onError: _completeDoneError);
    }
  
    Future get done => _doneFuture;
  
    void _completeDoneValue(value) {
      if (_doneCompleter == null) return;
      _doneCompleter.complete(value);
      _doneCompleter = null;
    }
  
    void _completeDoneError(error, StackTrace stackTrace) {
      if (_doneCompleter == null) return;
      _hasError = true;
      _doneCompleter.completeError(error, stackTrace);
      _doneCompleter = null;
    }
  
    StreamController<T> get _controller {
  
negative.code:   Encoding encoding;
  
    /**
     * Adds byte [data] to the target consumer, ignoring [encoding].
     *
     * The [encoding] does not apply to this method, and the `data` list is passed
     * directly to the target consumer as a stream event.
  