Merge pull request #51 from dart-lang/stream-queue-cast-errors

Fix runtime cast errors in StreamQueue.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2577503..c8f4d63 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,12 @@
+## 2.0.5
+
+* Fix Dart 2.0 [runtime cast errors][sdk#27223] in `StreamQueue`.
+
+[sdk#27223]: https://github.com/dart-lang/sdk/issues/27223
+
 ## 2.0.4
 
-* Add support for Dart 2.0 library changes to Stream and StreamTransformer.
+* Add support for Dart 2.0 library changes to `Stream` and `StreamTransformer`.
   Changed classes that implement `StreamTransformer` to extend
   `StreamTransformerBase`, and changed signatures of `firstWhere`, `lastWhere`,
   and `singleWhere` on classes extending `Stream`.  See
@@ -15,7 +21,7 @@
 
 ## 2.0.2
 
-* Add support for Dart 2.0 library changes to class `Timer`. 
+* Add support for Dart 2.0 library changes to class `Timer`.
 
 ## 2.0.1
 
@@ -35,7 +41,7 @@
 * Make `TypeSafeStream` extend `Stream` instead of implementing it. This ensures
   that new methods on `Stream` are automatically picked up, they will go through
   the `listen` method which type-checks every event.
-  
+
 ## 1.13.2
 
 * Fix a type-warning.
diff --git a/lib/src/stream_queue.dart b/lib/src/stream_queue.dart
index d9be69d..0c81aec 100644
--- a/lib/src/stream_queue.dart
+++ b/lib/src/stream_queue.dart
@@ -99,7 +99,7 @@
   var _eventsReceived = 0;
 
   /// Queue of events not used by a request yet.
-  final QueueList<Result> _eventQueue = new QueueList();
+  final QueueList<Result<T>> _eventQueue = new QueueList();
 
   /// Queue of pending requests.
   ///
@@ -124,7 +124,7 @@
   /// one events.
   Future<bool> get hasNext {
     if (!_isClosed) {
-      var hasNextRequest = new _HasNextRequest();
+      var hasNextRequest = new _HasNextRequest<T>();
       _addRequest(hasNextRequest);
       return hasNextRequest.future;
     }
@@ -219,7 +219,7 @@
   Future<int> skip(int count) {
     if (count < 0) throw new RangeError.range(count, 0, null, "count");
     if (!_isClosed) {
-      var request = new _SkipRequest(count);
+      var request = new _SkipRequest<T>(count);
       _addRequest(request);
       return request.future;
     }
@@ -389,7 +389,7 @@
     _isClosed = true;
 
     if (!immediate) {
-      var request = new _CancelRequest(this);
+      var request = new _CancelRequest<T>(this);
       _addRequest(request);
       return request.future;
     }
@@ -457,7 +457,7 @@
 
   /// Called when the event source adds a new data or error event.
   /// Always calls [_updateRequests] after adding.
-  void _addResult(Result result) {
+  void _addResult(Result<T> result) {
     _eventsReceived++;
     _eventQueue.add(result);
     _updateRequests();
@@ -485,7 +485,7 @@
   ///
   /// If the request queue is empty and the request can be completed
   /// immediately, it skips the queue.
-  void _addRequest(_EventRequest request) {
+  void _addRequest(_EventRequest<T> request) {
     if (_requestQueue.isEmpty) {
       if (request.update(_eventQueue, _isDone)) return;
       _ensureListening();
diff --git a/pubspec.yaml b/pubspec.yaml
index e57d3ef..e163e4c 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: async
-version: 2.0.5-dev
+version: 2.0.5
 author: Dart Team <misc@dartlang.org>
 description: Utility functions and classes related to the 'dart:async' library.
 homepage: https://www.github.com/dart-lang/async