Enforce override annotations (dart-lang/stream_channel#42)

diff --git a/pkgs/stream_channel/analysis_options.yaml b/pkgs/stream_channel/analysis_options.yaml
index d19ee84..866c158 100644
--- a/pkgs/stream_channel/analysis_options.yaml
+++ b/pkgs/stream_channel/analysis_options.yaml
@@ -8,5 +8,6 @@
 
 linter:
   rules:
+    - annotate_overrides
     - comment_references
     - prefer_typing_uninitialized_variables
diff --git a/pkgs/stream_channel/lib/src/close_guarantee_channel.dart b/pkgs/stream_channel/lib/src/close_guarantee_channel.dart
index b8a3f02..c534a91 100644
--- a/pkgs/stream_channel/lib/src/close_guarantee_channel.dart
+++ b/pkgs/stream_channel/lib/src/close_guarantee_channel.dart
@@ -14,9 +14,11 @@
 ///
 /// This is exposed via [new StreamChannel.withCloseGuarantee].
 class CloseGuaranteeChannel<T> extends StreamChannelMixin<T> {
+  @override
   Stream<T> get stream => _stream;
   _CloseGuaranteeStream<T> _stream;
 
+  @override
   StreamSink<T> get sink => _sink;
   _CloseGuaranteeSink<T> _sink;
 
@@ -45,6 +47,7 @@
 
   _CloseGuaranteeStream(this._inner, this._channel);
 
+  @override
   StreamSubscription<T> listen(void onData(T event),
       {Function onError, void onDone(), bool cancelOnError}) {
     // If the channel is already disconnected, we shouldn't dispatch anything
@@ -73,6 +76,7 @@
 
   _CloseGuaranteeSink(StreamSink<T> inner, this._channel) : super(inner);
 
+  @override
   Future close() {
     var done = super.close();
     _channel._disconnected = true;
diff --git a/pkgs/stream_channel/lib/src/delegating_stream_channel.dart b/pkgs/stream_channel/lib/src/delegating_stream_channel.dart
index 4434cf6..4484a59 100644
--- a/pkgs/stream_channel/lib/src/delegating_stream_channel.dart
+++ b/pkgs/stream_channel/lib/src/delegating_stream_channel.dart
@@ -14,7 +14,9 @@
   /// The inner channel to which methods are forwarded.
   final StreamChannel<T> _inner;
 
+  @override
   Stream<T> get stream => _inner.stream;
+  @override
   StreamSink<T> get sink => _inner.sink;
 
   DelegatingStreamChannel(this._inner);
diff --git a/pkgs/stream_channel/lib/src/disconnector.dart b/pkgs/stream_channel/lib/src/disconnector.dart
index 9d35cfc..83defb8 100644
--- a/pkgs/stream_channel/lib/src/disconnector.dart
+++ b/pkgs/stream_channel/lib/src/disconnector.dart
@@ -40,6 +40,7 @@
       });
   final _disconnectMemo = AsyncMemoizer();
 
+  @override
   StreamChannel<T> bind(StreamChannel<T> channel) {
     return channel.changeSink((innerSink) {
       var sink = _DisconnectorSink<T>(innerSink);
@@ -62,6 +63,7 @@
   /// The inner sink.
   final StreamSink<T> _inner;
 
+  @override
   Future get done => _inner.done;
 
   /// Whether [Disconnector.disconnect] has been called.
@@ -83,6 +85,7 @@
 
   _DisconnectorSink(this._inner);
 
+  @override
   void add(T data) {
     if (_closed) throw StateError("Cannot add event after closing.");
     if (_inAddStream) {
@@ -93,6 +96,7 @@
     _inner.add(data);
   }
 
+  @override
   void addError(error, [StackTrace stackTrace]) {
     if (_closed) throw StateError("Cannot add event after closing.");
     if (_inAddStream) {
@@ -103,6 +107,7 @@
     _inner.addError(error, stackTrace);
   }
 
+  @override
   Future addStream(Stream<T> stream) {
     if (_closed) throw StateError("Cannot add stream after closing.");
     if (_inAddStream) {
@@ -119,6 +124,7 @@
     });
   }
 
+  @override
   Future close() {
     if (_inAddStream) {
       throw StateError("Cannot close sink while adding stream.");
diff --git a/pkgs/stream_channel/lib/src/guarantee_channel.dart b/pkgs/stream_channel/lib/src/guarantee_channel.dart
index e96f5c3..ce7f707 100644
--- a/pkgs/stream_channel/lib/src/guarantee_channel.dart
+++ b/pkgs/stream_channel/lib/src/guarantee_channel.dart
@@ -12,8 +12,10 @@
 ///
 /// This is exposed via [new StreamChannel.withGuarantees].
 class GuaranteeChannel<T> extends StreamChannelMixin<T> {
+  @override
   Stream<T> get stream => _streamController.stream;
 
+  @override
   StreamSink<T> get sink => _sink;
   _GuaranteeSink<T> _sink;
 
@@ -78,6 +80,7 @@
   /// The [GuaranteeChannel] this belongs to.
   final GuaranteeChannel<T> _channel;
 
+  @override
   Future get done => _doneCompleter.future;
   final _doneCompleter = Completer();
 
@@ -110,6 +113,7 @@
   _GuaranteeSink(this._inner, this._channel, {bool allowErrors = true})
       : _allowErrors = allowErrors;
 
+  @override
   void add(T data) {
     if (_closed) throw StateError("Cannot add event after closing.");
     if (_inAddStream) {
@@ -120,6 +124,7 @@
     _inner.add(data);
   }
 
+  @override
   void addError(error, [StackTrace stackTrace]) {
     if (_closed) throw StateError("Cannot add event after closing.");
     if (_inAddStream) {
@@ -151,6 +156,7 @@
     _inner.close().catchError((_) {});
   }
 
+  @override
   Future addStream(Stream<T> stream) {
     if (_closed) throw StateError("Cannot add stream after closing.");
     if (_inAddStream) {
@@ -167,6 +173,7 @@
     });
   }
 
+  @override
   Future close() {
     if (_inAddStream) {
       throw StateError("Cannot close sink while adding stream.");
diff --git a/pkgs/stream_channel/lib/src/isolate_channel.dart b/pkgs/stream_channel/lib/src/isolate_channel.dart
index c7f573f..8c1b568 100644
--- a/pkgs/stream_channel/lib/src/isolate_channel.dart
+++ b/pkgs/stream_channel/lib/src/isolate_channel.dart
@@ -24,7 +24,9 @@
 /// ensure that they always close the [sink] of every [IsolateChannel] they use
 /// to avoid leaving dangling [ReceivePort]s.
 class IsolateChannel<T> extends StreamChannelMixin<T> {
+  @override
   final Stream<T> stream;
+  @override
   final StreamSink<T> sink;
 
   /// Connects to a remote channel that was created with
diff --git a/pkgs/stream_channel/lib/src/json_document_transformer.dart b/pkgs/stream_channel/lib/src/json_document_transformer.dart
index 2a3a86f..a53ac92 100644
--- a/pkgs/stream_channel/lib/src/json_document_transformer.dart
+++ b/pkgs/stream_channel/lib/src/json_document_transformer.dart
@@ -35,6 +35,7 @@
 
   JsonDocumentTransformer._(this._codec);
 
+  @override
   StreamChannel<Object> bind(StreamChannel<String> channel) {
     var stream = channel.stream.map(_codec.decode);
     var sink = StreamSinkTransformer<Object, String>.fromHandlers(
diff --git a/pkgs/stream_channel/lib/src/multi_channel.dart b/pkgs/stream_channel/lib/src/multi_channel.dart
index 139c9ae..d729eb7 100644
--- a/pkgs/stream_channel/lib/src/multi_channel.dart
+++ b/pkgs/stream_channel/lib/src/multi_channel.dart
@@ -45,6 +45,7 @@
   /// The default input stream.
   ///
   /// This connects to the remote [sink].
+  @override
   Stream<T> get stream;
 
   /// The default output stream.
@@ -52,6 +53,7 @@
   /// This connects to the remote [stream]. If this is closed, the remote
   /// [stream] will close, but other virtual channels will remain open and new
   /// virtual channels may be opened.
+  @override
   StreamSink<T> get sink;
 
   /// Creates a new [MultiChannel] that sends and receives messages over
@@ -88,7 +90,9 @@
   /// The subscription to [_inner].stream.
   StreamSubscription<dynamic> _innerStreamSubscription;
 
+  @override
   Stream<T> get stream => _mainController.foreign.stream;
+  @override
   StreamSink<T> get sink => _mainController.foreign.sink;
 
   /// The controller for this channel.
@@ -165,6 +169,7 @@
         onError: _mainController.local.sink.addError);
   }
 
+  @override
   VirtualChannel<T> virtualChannel([int id]) {
     int inputId;
     int outputId;
@@ -256,10 +261,13 @@
   /// except that it will be JSON-serializable.
   final int id;
 
+  @override
   final Stream<T> stream;
+  @override
   final StreamSink<T> sink;
 
   VirtualChannel._(this._parent, this.id, this.stream, this.sink);
 
+  @override
   VirtualChannel<T> virtualChannel([id]) => _parent.virtualChannel(id);
 }
diff --git a/pkgs/stream_channel/lib/src/transformer/typed.dart b/pkgs/stream_channel/lib/src/transformer/typed.dart
index 9c2d72b..875cdac 100644
--- a/pkgs/stream_channel/lib/src/transformer/typed.dart
+++ b/pkgs/stream_channel/lib/src/transformer/typed.dart
@@ -12,6 +12,7 @@
 
   TypeSafeStreamChannelTransformer(this._inner);
 
+  @override
   StreamChannel<S> bind(StreamChannel<T> channel) =>
       _inner.bind(channel).cast();
 }
diff --git a/pkgs/stream_channel/lib/stream_channel.dart b/pkgs/stream_channel/lib/stream_channel.dart
index b501160..a5cd584 100644
--- a/pkgs/stream_channel/lib/stream_channel.dart
+++ b/pkgs/stream_channel/lib/stream_channel.dart
@@ -138,7 +138,9 @@
 /// This is distinct from [StreamChannel] so that it can use
 /// [StreamChannelMixin].
 class _StreamChannel<T> extends StreamChannelMixin<T> {
+  @override
   final Stream<T> stream;
+  @override
   final StreamSink<T> sink;
 
   _StreamChannel(this.stream, this.sink);
@@ -147,26 +149,33 @@
 /// A mixin that implements the instance methods of [StreamChannel] in terms of
 /// [stream] and [sink].
 abstract class StreamChannelMixin<T> implements StreamChannel<T> {
+  @override
   void pipe(StreamChannel<T> other) {
     stream.pipe(other.sink);
     other.stream.pipe(sink);
   }
 
+  @override
   StreamChannel<S> transform<S>(StreamChannelTransformer<S, T> transformer) =>
       transformer.bind(this);
 
+  @override
   StreamChannel<T> transformStream(StreamTransformer<T, T> transformer) =>
       changeStream(transformer.bind);
 
+  @override
   StreamChannel<T> transformSink(StreamSinkTransformer<T, T> transformer) =>
       changeSink(transformer.bind);
 
+  @override
   StreamChannel<T> changeStream(Stream<T> change(Stream<T> stream)) =>
       StreamChannel.withCloseGuarantee(change(stream), sink);
 
+  @override
   StreamChannel<T> changeSink(StreamSink<T> change(StreamSink<T> sink)) =>
       StreamChannel.withCloseGuarantee(stream, change(sink));
 
+  @override
   StreamChannel<S> cast<S>() => StreamChannel(
       DelegatingStream.typed(stream), DelegatingStreamSink.typed(sink));
 }
diff --git a/pkgs/stream_channel/test/disconnector_test.dart b/pkgs/stream_channel/test/disconnector_test.dart
index 7b36c29..aefad28 100644
--- a/pkgs/stream_channel/test/disconnector_test.dart
+++ b/pkgs/stream_channel/test/disconnector_test.dart
@@ -144,6 +144,7 @@
 
   _CloseCompleterSink(StreamSink inner) : super(inner);
 
+  @override
   Future close() {
     super.close();
     return completer.future;