[dart-pkg] Update packages

Change-Id: I376c7ee2faa4bc9089956dbc359198fa52094d88
diff --git a/args/BUILD.gn b/args/BUILD.gn
index 844bd2a..00d5247 100644
--- a/args/BUILD.gn
+++ b/args/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for args-1.2.0
+# This file is generated by importer.py for args-1.3.0
 
 import("//build/dart/dart_library.gni")
 
diff --git a/args/CHANGELOG.md b/args/CHANGELOG.md
index c026ae6..8771808 100644
--- a/args/CHANGELOG.md
+++ b/args/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.3.0
+
+* Type `Command.run()`'s return value as `FutureOr<T>`.
+
 ## 1.2.0
 
 * Type the `callback` parameter to `ArgParser.addOption()` as `Function` rather
diff --git a/args/lib/command_runner.dart b/args/lib/command_runner.dart
index 13b0a6e..3135dbf 100644
--- a/args/lib/command_runner.dart
+++ b/args/lib/command_runner.dart
@@ -352,10 +352,9 @@
 
   /// Runs this command.
   ///
-  /// This must return a `T`, a `Future<T>`, or `null`. The value is returned by
-  /// [CommandRunner.runCommand]. Subclasses must explicitly declare a return
-  /// type for `run()`, and may not use `void` if `T` is defined.
-  run() {
+  /// The return value is wrapped in a `Future` if necessary and returned by
+  /// [CommandRunner.runCommand].
+  FutureOr<T> run() {
     throw new UnimplementedError("Leaf command $this must implement run().");
   }
 
diff --git a/args/pubspec.yaml b/args/pubspec.yaml
index 42a4718..2c5fa59 100644
--- a/args/pubspec.yaml
+++ b/args/pubspec.yaml
@@ -1,5 +1,5 @@
 name: args
-version: 1.2.0
+version: 1.3.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: https://github.com/dart-lang/args
 description: >
diff --git a/async/BUILD.gn b/async/BUILD.gn
index 955e6c9..679445c 100644
--- a/async/BUILD.gn
+++ b/async/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for async-2.0.3
+# This file is generated by importer.py for async-2.0.4
 
 import("//build/dart/dart_library.gni")
 
diff --git a/async/CHANGELOG.md b/async/CHANGELOG.md
index 03fff02..2577503 100644
--- a/async/CHANGELOG.md
+++ b/async/CHANGELOG.md
@@ -1,3 +1,13 @@
+## 2.0.4
+
+* 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
+  also [issue 31847][sdk#31847].
+
+  [sdk#31847]: https://github.com/dart-lang/sdk/issues/31847
+
 ## 2.0.3
 
 * Fix a bug in `StreamQueue.startTransaction()` and related methods when
diff --git a/async/lib/src/result/capture_transformer.dart b/async/lib/src/result/capture_transformer.dart
index 71e8a00..5933f0c 100644
--- a/async/lib/src/result/capture_transformer.dart
+++ b/async/lib/src/result/capture_transformer.dart
@@ -11,7 +11,7 @@
 ///
 /// The result of the transformation is a stream of [Result] values and no
 /// error events. Exposed by [Result.captureStream].
-class CaptureStreamTransformer<T> implements StreamTransformer<T, Result<T>> {
+class CaptureStreamTransformer<T> extends StreamTransformerBase<T, Result<T>> {
   const CaptureStreamTransformer();
 
   Stream<Result<T>> bind(Stream<T> source) {
diff --git a/async/lib/src/result/release_transformer.dart b/async/lib/src/result/release_transformer.dart
index fc9278d..01865cc 100644
--- a/async/lib/src/result/release_transformer.dart
+++ b/async/lib/src/result/release_transformer.dart
@@ -8,7 +8,7 @@
 import 'release_sink.dart';
 
 /// A transformer that releases result events as data and error events.
-class ReleaseStreamTransformer<T> implements StreamTransformer<Result<T>, T> {
+class ReleaseStreamTransformer<T> extends StreamTransformerBase<Result<T>, T> {
   const ReleaseStreamTransformer();
 
   Stream<T> bind(Stream<Result<T>> source) {
diff --git a/async/lib/src/single_subscription_transformer.dart b/async/lib/src/single_subscription_transformer.dart
index fcd6b06..f590860 100644
--- a/async/lib/src/single_subscription_transformer.dart
+++ b/async/lib/src/single_subscription_transformer.dart
@@ -13,7 +13,7 @@
 /// This also casts the source stream's events to type `T`. If the cast fails,
 /// the result stream will emit a [CastError]. This behavior is deprecated, and
 /// should not be relied upon.
-class SingleSubscriptionTransformer<S, T> implements StreamTransformer<S, T> {
+class SingleSubscriptionTransformer<S, T> extends StreamTransformerBase<S, T> {
   const SingleSubscriptionTransformer();
 
   Stream<T> bind(Stream<S> stream) {
diff --git a/async/lib/src/typed/stream.dart b/async/lib/src/typed/stream.dart
index a467115..b3b0513 100644
--- a/async/lib/src/typed/stream.dart
+++ b/async/lib/src/typed/stream.dart
@@ -53,14 +53,18 @@
   Stream<S> expand<S>(Iterable<S> convert(T value)) =>
       _stream.expand(_validateType(convert));
 
-  Future firstWhere(bool test(T element), {Object defaultValue()}) =>
-      _stream.firstWhere(_validateType(test), defaultValue: defaultValue);
+  Future<T> firstWhere(bool test(T element),
+          {Object defaultValue(), T orElse()}) =>
+      _stream.firstWhere(_validateType(test),
+          defaultValue: defaultValue, orElse: orElse);
 
-  Future lastWhere(bool test(T element), {Object defaultValue()}) =>
-      _stream.lastWhere(_validateType(test), defaultValue: defaultValue);
+  Future<T> lastWhere(bool test(T element),
+          {Object defaultValue(), T orElse()}) =>
+      _stream.lastWhere(_validateType(test),
+          defaultValue: defaultValue, orElse: orElse);
 
-  Future<T> singleWhere(bool test(T element)) async =>
-      (await _stream.singleWhere(_validateType(test))) as T;
+  Future<T> singleWhere(bool test(T element), {T orElse()}) async =>
+      await _stream.singleWhere(_validateType(test), orElse: orElse);
 
   Future<S> fold<S>(S initialValue, S combine(S previous, T element)) =>
       _stream.fold(
diff --git a/async/lib/src/typed_stream_transformer.dart b/async/lib/src/typed_stream_transformer.dart
index 98d5e70..cb63311 100644
--- a/async/lib/src/typed_stream_transformer.dart
+++ b/async/lib/src/typed_stream_transformer.dart
@@ -20,7 +20,7 @@
 
 /// A wrapper that coerces the type of the stream returned by an inner
 /// transformer.
-class _TypeSafeStreamTransformer<S, T> implements StreamTransformer<S, T> {
+class _TypeSafeStreamTransformer<S, T> extends StreamTransformerBase<S, T> {
   final StreamTransformer _inner;
 
   _TypeSafeStreamTransformer(this._inner);
diff --git a/async/pubspec.yaml b/async/pubspec.yaml
index 3fd3bbb..3b9bac4 100644
--- a/async/pubspec.yaml
+++ b/async/pubspec.yaml
@@ -1,10 +1,10 @@
 name: async
-version: 2.0.3
+version: 2.0.4
 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
 environment:
-  sdk: ">=2.0.0-dev.15.0 <2.0.0"
+  sdk: ">=2.0.0-dev.23.0 <2.0.0"
 dependencies:
   collection: "^1.5.0"
 dev_dependencies:
diff --git a/file/BUILD.gn b/file/BUILD.gn
index fb7bf10..b9da950 100644
--- a/file/BUILD.gn
+++ b/file/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for file-2.3.5
+# This file is generated by importer.py for file-2.3.6
 
 import("//build/dart/dart_library.gni")
 
diff --git a/file/CHANGELOG.md b/file/CHANGELOG.md
index d8719f5..8d35ce2 100644
--- a/file/CHANGELOG.md
+++ b/file/CHANGELOG.md
@@ -1,3 +1,7 @@
+#### 2.3.6
+
+* Relax sdk upper bound constraint to  '<2.0.0' to allow 'edge' dart sdk use.
+
 #### 2.3.5
 
 * Fix internal use of a cast which fails on Dart 2.0 .
diff --git a/file/lib/src/backends/chroot/chroot_file_system.dart b/file/lib/src/backends/chroot/chroot_file_system.dart
index 963832a..54a4892 100644
--- a/file/lib/src/backends/chroot/chroot_file_system.dart
+++ b/file/lib/src/backends/chroot/chroot_file_system.dart
@@ -121,7 +121,7 @@
     assert(() {
       p.Context ctx = delegate.path;
       return ctx.isAbsolute(value) && value == ctx.canonicalize(value);
-    });
+    }());
     _cwd = value;
   }
 
@@ -232,7 +232,7 @@
     if (resolve) {
       localPath = _resolve(localPath, followLinks: followLinks);
     } else {
-      assert(() => path.isAbsolute(localPath));
+      assert(path.isAbsolute(localPath));
     }
     return '$root$localPath';
   }
diff --git a/file/lib/src/backends/memory/memory_directory.dart b/file/lib/src/backends/memory/memory_directory.dart
index da41c96..eaf6875 100644
--- a/file/lib/src/backends/memory/memory_directory.dart
+++ b/file/lib/src/backends/memory/memory_directory.dart
@@ -71,7 +71,7 @@
   Future<Directory> rename(String newPath) async => renameSync(newPath);
 
   @override
-  Directory renameSync(String newPath) => _renameSync(
+  Directory renameSync(String newPath) => _renameSync<_DirectoryNode>(
         newPath,
         validateOverwriteExistingEntity: (_DirectoryNode existingNode) {
           if (existingNode.children.isNotEmpty) {
diff --git a/file/lib/src/backends/memory/memory_file_system_entity.dart b/file/lib/src/backends/memory/memory_file_system_entity.dart
index dfe23f9..349e03b 100644
--- a/file/lib/src/backends/memory/memory_file_system_entity.dart
+++ b/file/lib/src/backends/memory/memory_file_system_entity.dart
@@ -207,9 +207,9 @@
   /// If [checkType] is specified, it will be used to validate that the file
   /// system entity that exists at [path] is of the expected type. By default,
   /// [_defaultCheckType] is used to perform this validation.
-  FileSystemEntity _renameSync(
+  FileSystemEntity _renameSync<T extends _Node>(
     String newPath, {
-    _RenameOverwriteValidator<dynamic> validateOverwriteExistingEntity,
+    _RenameOverwriteValidator<T> validateOverwriteExistingEntity,
     bool followTailLink: false,
     _TypeChecker checkType,
   }) {
diff --git a/file/pubspec.yaml b/file/pubspec.yaml
index 7484c4b..3cedcab 100644
--- a/file/pubspec.yaml
+++ b/file/pubspec.yaml
@@ -1,5 +1,5 @@
 name: file
-version: 2.3.5
+version: 2.3.6
 authors:
 - Matan Lurey <matanl@google.com>
 - Yegor Jbanov <yjbanov@google.com>
@@ -16,4 +16,4 @@
   test: ^0.12.18
 
 environment:
-  sdk: '>=1.19.0 <2.0.0-dev.infinity'
+  sdk: '>=1.19.0 <2.0.0'
diff --git a/io/.travis.yml b/io/.travis.yml
index ccd3815..205a404 100644
--- a/io/.travis.yml
+++ b/io/.travis.yml
@@ -1,20 +1,18 @@
 language: dart
-sudo: false
+
 dart:
   - dev
   - stable
-cache:
-  directories:
-    - $HOME/.pub-cache
+
 dart_task:
-  - test: --platform vm
-    install_dartium: true
+  - test
   - dartanalyzer
   - dartfmt
-matrix:
-  # Only run dartfmt checks with stable.
-  exclude:
-    - dart: dev
-      dart_task: dartfmt
-    - dart: dev
-      dart_task: dartanalyzer
+
+# Only building master means that we don't run two builds for each pull request.
+branches:
+  only: [master]
+
+cache:
+ directories:
+   - $HOME/.pub-cache
diff --git a/io/BUILD.gn b/io/BUILD.gn
index 3f5320d..442776f 100644
--- a/io/BUILD.gn
+++ b/io/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for io-0.3.1
+# This file is generated by importer.py for io-0.3.2+1
 
 import("//build/dart/dart_library.gni")
 
diff --git a/io/CHANGELOG.md b/io/CHANGELOG.md
index c2565ea..93ca915 100644
--- a/io/CHANGELOG.md
+++ b/io/CHANGELOG.md
@@ -1,3 +1,23 @@
+## 0.3.2+1
+
+* `ansi.dart`
+
+  * The "forScript" code paths now ignore the `ansiOutputEnabled` value. Affects
+    the `escapeForScript` property on `AnsiCode` and the `wrap` and `wrapWith`
+    functions when `forScript` is true.
+
+## 0.3.2
+
+* `ansi.dart`
+
+  * Added `forScript` named argument to top-level `wrapWith` function.
+
+  * `AnsiCode`
+
+    * Added `String get escapeForScript` property.
+
+    * Added `forScript` named argument to `wrap` function.
+
 ## 0.3.1
 
 - Added `SharedStdIn.nextLine` (similar to `readLineSync`) and `lines`:
diff --git a/io/example/ansi_code_example.dart b/io/example/ansi_code_example.dart
index 255bd72..e622f03 100644
--- a/io/example/ansi_code_example.dart
+++ b/io/example/ansi_code_example.dart
@@ -7,17 +7,19 @@
 import 'package:io/ansi.dart';
 
 /// Prints a sample of all of the `AnsiCode` values.
-void main() {
+void main(List<String> args) {
+  final forScript = args.contains('--for-script');
+
   if (!ansiOutputEnabled) {
     print('`ansiOutputEnabled` is `false`.');
     print("Don't expect pretty output.");
   }
-  _preview('Foreground', foregroundColors);
-  _preview('Background', backgroundColors);
-  _preview('Styles', styles);
+  _preview('Foreground', foregroundColors, forScript);
+  _preview('Background', backgroundColors, forScript);
+  _preview('Styles', styles, forScript);
 }
 
-void _preview(String name, List<AnsiCode> values) {
+void _preview(String name, List<AnsiCode> values, bool forScript) {
   print('');
   final longest = values.map((ac) => ac.name.length).reduce(max);
 
@@ -26,6 +28,6 @@
     final header =
         "${code.name.padRight(longest)} ${code.code.toString().padLeft(3)}";
 
-    print("$header: ${code.wrap('Sample')}");
+    print("$header: ${code.wrap('Sample', forScript: forScript)}");
   }
 }
diff --git a/io/lib/src/ansi_code.dart b/io/lib/src/ansi_code.dart
index beee945..8b9c3a1 100644
--- a/io/lib/src/ansi_code.dart
+++ b/io/lib/src/ansi_code.dart
@@ -5,6 +5,9 @@
 import 'dart:async';
 import 'dart:io' as io;
 
+const _ansiEscapeLiteral = '\x1B';
+const _ansiEscapeForScript = '\\033';
+
 /// Whether formatted ANSI output is enabled for [wrapWith] and [AnsiCode.wrap].
 ///
 /// By default, returns `true` if both `stdout.supportsAnsiEscapes` and
@@ -18,6 +21,13 @@
     Zone.current[AnsiCode] as bool ??
     (io.stdout.supportsAnsiEscapes && io.stderr.supportsAnsiEscapes);
 
+/// Returns `true` no formatting is required for [input].
+bool _isNoop(bool skip, String input, bool forScript) =>
+    skip ||
+    input == null ||
+    input.isEmpty ||
+    !((forScript ?? false) || ansiOutputEnabled);
+
 /// Allows overriding [ansiOutputEnabled] to [enableAnsiOutput] for the code run
 /// within [body].
 T overrideAnsiOutput<T>(bool enableAnsiOutput, T body()) =>
@@ -66,21 +76,31 @@
   const AnsiCode._(this.name, this.type, this.code, this.reset);
 
   /// Represents the value escaped for use in terminal output.
-  String get escape => "\x1B[${code}m";
+  String get escape => "$_ansiEscapeLiteral[${code}m";
+
+  /// Represents the value as an unescaped literal suitable for scripts.
+  String get escapeForScript => "$_ansiEscapeForScript[${code}m";
+
+  String _escapeValue({bool forScript: false}) {
+    forScript ??= false;
+    return forScript ? escapeForScript : escape;
+  }
 
   /// Wraps [value] with the [escape] value for this code, followed by
   /// [resetAll].
   ///
+  /// If [forScript] is `true`, the return value is an unescaped literal. The
+  /// value of [ansiOutputEnabled] is also ignored.
+  ///
   /// Returns `value` unchanged if
   ///   * [value] is `null` or empty
-  ///   * [ansiOutputEnabled] is `false`
+  ///   * both [ansiOutputEnabled] and [forScript] are `false`.
   ///   * [type] is [AnsiCodeType.reset]
-  String wrap(String value) => (ansiOutputEnabled &&
-          type != AnsiCodeType.reset &&
-          value != null &&
-          value.isNotEmpty)
-      ? "$escape$value${reset.escape}"
-      : value;
+  String wrap(String value, {bool forScript: false}) =>
+      _isNoop(type == AnsiCodeType.reset, value, forScript)
+          ? value
+          : "${_escapeValue(forScript: forScript)}$value"
+          "${reset._escapeValue(forScript: forScript)}";
 
   @override
   String toString() => "$name ${type._name} ($code)";
@@ -88,20 +108,25 @@
 
 /// Returns a [String] formatted with [codes].
 ///
+/// If [forScript] is `true`, the return value is an unescaped literal. The
+/// value of [ansiOutputEnabled] is also ignored.
+///
 /// Returns `value` unchanged if
 ///   * [value] is `null` or empty.
-///   * [ansiOutputEnabled] is `false`.
+///   * both [ansiOutputEnabled] and [forScript] are `false`.
 ///   * [codes] is empty.
 ///
 /// Throws an [ArgumentError] if
 ///   * [codes] contains more than one value of type [AnsiCodeType.foreground].
 ///   * [codes] contains more than one value of type [AnsiCodeType.background].
 ///   * [codes] contains any value of type [AnsiCodeType.reset].
-String wrapWith(String value, Iterable<AnsiCode> codes) {
+String wrapWith(String value, Iterable<AnsiCode> codes,
+    {bool forScript: false}) {
+  forScript ??= false;
   // Eliminate duplicates
   final myCodes = codes.toSet();
 
-  if (myCodes.isEmpty || !ansiOutputEnabled || value == null || value.isEmpty) {
+  if (_isNoop(myCodes.isEmpty, value, forScript)) {
     return value;
   }
 
@@ -130,8 +155,10 @@
   }
 
   final sortedCodes = myCodes.map((ac) => ac.code).toList()..sort();
+  final escapeValue = forScript ? _ansiEscapeForScript : _ansiEscapeLiteral;
 
-  return "\x1B[${sortedCodes.join(';')}m$value${resetAll.escape}";
+  return "$escapeValue[${sortedCodes.join(';')}m$value"
+      "${resetAll._escapeValue(forScript: forScript)}";
 }
 
 //
diff --git a/io/pubspec.yaml b/io/pubspec.yaml
index 78ac7de..0e2818e 100644
--- a/io/pubspec.yaml
+++ b/io/pubspec.yaml
@@ -1,7 +1,7 @@
 name: io
 description: >
   Utilities for the Dart VM Runtime.
-version: 0.3.1
+version: 0.3.2+1
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/io
 
diff --git a/meta/BUILD.gn b/meta/BUILD.gn
index 995764e..68d3ad5 100644
--- a/meta/BUILD.gn
+++ b/meta/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for meta-1.1.1
+# This file is generated by importer.py for meta-1.1.2
 
 import("//build/dart/dart_library.gni")
 
diff --git a/meta/CHANGELOG.md b/meta/CHANGELOG.md
index b44eb57..3f893d4 100644
--- a/meta/CHANGELOG.md
+++ b/meta/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.2
+
+* Rollback SDK constraint update for 2.0.0. No longer needed.
+
 ## 1.1.1
 * Update SDK constraint to be 2.0.0 dev friendly.
 
diff --git a/meta/pubspec.yaml b/meta/pubspec.yaml
index 50f7b1b..c46d798 100644
--- a/meta/pubspec.yaml
+++ b/meta/pubspec.yaml
@@ -1,10 +1,10 @@
 name: meta
-version: 1.1.1
+version: 1.1.2
 author: Dart Team <misc@dartlang.org>
-homepage: http://www.dartlang.org
+homepage: https://github.com/dart-lang/sdk/tree/master/pkg/meta
 description: >
  This library contains the definitions of annotations that provide additional
  semantic information about the program being annotated. These annotations are
  intended to be used by tools to provide a better user experience.
 environment:
-  sdk: '>=1.12.0 <2.0.0-dev.infinity'
+  sdk: '>=1.12.0 <2.0.0'
diff --git a/mime/.travis.yml b/mime/.travis.yml
index da58f76..8b6048d 100644
--- a/mime/.travis.yml
+++ b/mime/.travis.yml
@@ -2,7 +2,6 @@
 sudo: false
 dart:
   - dev
-  - stable
 dart_task:
   - test
   - dartfmt
diff --git a/mime/BUILD.gn b/mime/BUILD.gn
index 5d44fd1..56cd92c 100644
--- a/mime/BUILD.gn
+++ b/mime/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for mime-0.9.5
+# This file is generated by importer.py for mime-0.9.6
 
 import("//build/dart/dart_library.gni")
 
diff --git a/mime/CHANGELOG.md b/mime/CHANGELOG.md
index 043c412..1e3f9a1 100644
--- a/mime/CHANGELOG.md
+++ b/mime/CHANGELOG.md
@@ -1,3 +1,10 @@
+# 0.9.6
+
+* Updates to support Dart 2.0 core library changes (wave
+  2.2). See [issue 31847][sdk#31847] for details.
+  
+  [sdk#31847]: https://github.com/dart-lang/sdk/issues/31847
+
 # 0.9.5
 
 * Add support for the WebAssembly format.
diff --git a/mime/lib/src/mime_multipart_transformer.dart b/mime/lib/src/mime_multipart_transformer.dart
index ba1a5ae..a71e6d9 100644
--- a/mime/lib/src/mime_multipart_transformer.dart
+++ b/mime/lib/src/mime_multipart_transformer.dart
@@ -30,7 +30,7 @@
  * of them streaming the multipart data.
  */
 class MimeMultipartTransformer
-    implements StreamTransformer<List<int>, MimeMultipart> {
+    extends StreamTransformerBase<List<int>, MimeMultipart> {
   final List<int> _boundary;
 
   /**
diff --git a/mime/pubspec.yaml b/mime/pubspec.yaml
index 75f0457..1811771 100644
--- a/mime/pubspec.yaml
+++ b/mime/pubspec.yaml
@@ -1,9 +1,9 @@
 name: mime
-version: 0.9.5
+version: 0.9.6
 author: Dart Team <misc@dartlang.org>
 description: Helper-package for working with MIME.
 homepage: https://www.github.com/dart-lang/mime
 environment:
-  sdk: '>=1.8.3 <2.0.0'
+  sdk: '>=2.0.0-dev.20.0 <2.0.0'
 dev_dependencies:
   test: '^0.12.0'
diff --git a/mockito/.idea/libraries/Dart_Packages.xml b/mockito/.idea/libraries/Dart_Packages.xml
deleted file mode 100644
index e078a23..0000000
--- a/mockito/.idea/libraries/Dart_Packages.xml
+++ /dev/null
@@ -1,404 +0,0 @@
-<component name="libraryTable">
-  <library name="Dart Packages" type="DartPackagesLibraryType">
-    <properties>
-      <option name="packageNameToDirsMap">
-        <entry key="analyzer">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/analyzer-0.30.0+4/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="args">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/args-1.0.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="async">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="barback">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/barback-0.15.2+13/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="boolean_selector">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/boolean_selector-1.0.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="charcode">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/charcode-1.1.1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="cli_util">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/cli_util-0.1.2+1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="collection">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/collection-1.14.3/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="convert">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/convert-2.0.1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="crypto">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/crypto-2.0.2+1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="csslib">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/csslib-0.14.1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="front_end">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/front_end-0.1.0-alpha.4.1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="glob">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/glob-1.1.5/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="html">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/html-0.13.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="http">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http-0.11.3+16/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="http_multi_server">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_multi_server-2.0.4/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="http_parser">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="io">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/io-0.3.0/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="isolate">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/isolate-1.1.0/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="js">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/js-0.6.1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="kernel">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/kernel-0.3.0-alpha.1.1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="logging">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/logging-0.11.3+1/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="matcher">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.1+4/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="meta">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/meta-1.1.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="mime">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/mime-0.9.3/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="node_preamble">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/node_preamble-1.4.0/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="package_config">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/package_config-1.0.3/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="package_resolver">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/package_resolver-1.0.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="path">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/path-1.4.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="plugin">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/plugin-0.2.0+2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="pool">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pool-1.3.3/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="pub_semver">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pub_semver-1.3.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="shelf">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf-0.7.0/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="shelf_packages_handler">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_packages_handler-1.0.3/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="shelf_static">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_static-0.2.6/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="shelf_web_socket">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_web_socket-0.2.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="source_map_stack_trace">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_map_stack_trace-1.1.4/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="source_maps">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_maps-0.10.4/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="source_span">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_span-1.4.0/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="stack_trace">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.8.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="stream_channel">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/stream_channel-1.6.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="string_scanner">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.0.2/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="term_glyph">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.0.0/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="test">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/test-0.12.26/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="typed_data">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/typed_data-1.1.5/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="utf">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/utf-0.9.0+3/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="watcher">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/watcher-0.9.7+4/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="web_socket_channel">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/web_socket_channel-1.0.6/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="yaml">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.13/lib" />
-            </list>
-          </value>
-        </entry>
-      </option>
-    </properties>
-    <CLASSES>
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/analyzer-0.30.0+4/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/args-1.0.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/barback-0.15.2+13/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/boolean_selector-1.0.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/charcode-1.1.1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/cli_util-0.1.2+1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/collection-1.14.3/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/convert-2.0.1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/crypto-2.0.2+1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/csslib-0.14.1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/front_end-0.1.0-alpha.4.1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/glob-1.1.5/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/html-0.13.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http-0.11.3+16/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_multi_server-2.0.4/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/io-0.3.0/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/isolate-1.1.0/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/js-0.6.1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/kernel-0.3.0-alpha.1.1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/logging-0.11.3+1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.1+4/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/meta-1.1.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/mime-0.9.3/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/node_preamble-1.4.0/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/package_config-1.0.3/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/package_resolver-1.0.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/path-1.4.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/plugin-0.2.0+2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pool-1.3.3/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pub_semver-1.3.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf-0.7.0/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_packages_handler-1.0.3/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_static-0.2.6/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_web_socket-0.2.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_map_stack_trace-1.1.4/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_maps-0.10.4/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_span-1.4.0/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.8.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/stream_channel-1.6.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.0.2/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.0.0/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/test-0.12.26/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/typed_data-1.1.5/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/utf-0.9.0+3/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/watcher-0.9.7+4/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/web_socket_channel-1.0.6/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.13/lib" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES />
-  </library>
-</component>
\ No newline at end of file
diff --git a/mockito/.idea/libraries/Dart_SDK.xml b/mockito/.idea/libraries/Dart_SDK.xml
deleted file mode 100644
index 2255dbd..0000000
--- a/mockito/.idea/libraries/Dart_SDK.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<component name="libraryTable">
-  <library name="Dart SDK">
-    <CLASSES>
-      <root url="file:///usr/local/opt/dart/libexec/lib/async" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/collection" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/convert" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/core" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/developer" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/html" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/indexed_db" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/io" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/isolate" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/js" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/js_util" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/math" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/mirrors" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/svg" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/typed_data" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/web_audio" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/web_gl" />
-      <root url="file:///usr/local/opt/dart/libexec/lib/web_sql" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES />
-  </library>
-</component>
\ No newline at end of file
diff --git a/mockito/.idea/misc.xml b/mockito/.idea/misc.xml
deleted file mode 100644
index 639900d..0000000
--- a/mockito/.idea/misc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectRootManager">
-    <output url="file://$PROJECT_DIR$/out" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/mockito/.idea/modules.xml b/mockito/.idea/modules.xml
deleted file mode 100644
index 8b984f4..0000000
--- a/mockito/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/dart-mockito.iml" filepath="$PROJECT_DIR$/dart-mockito.iml" />
-    </modules>
-  </component>
-</project>
\ No newline at end of file
diff --git a/mockito/.idea/vcs.xml b/mockito/.idea/vcs.xml
deleted file mode 100644
index 35eb1ddf..0000000
--- a/mockito/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="" vcs="Git" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/mockito/.idea/workspace.xml b/mockito/.idea/workspace.xml
deleted file mode 100644
index 7b6e795..0000000
--- a/mockito/.idea/workspace.xml
+++ /dev/null
@@ -1,341 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ChangeListManager">
-    <list default="true" id="7d90fd74-c951-4612-a7f4-109d6fb83fc5" name="Default" comment="">
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/mockito.dart" afterPath="$PROJECT_DIR$/lib/mockito.dart" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/invocation_matcher.dart" afterPath="$PROJECT_DIR$/lib/src/invocation_matcher.dart" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/pubspec.yaml" afterPath="$PROJECT_DIR$/pubspec.yaml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/mockito_test.dart" afterPath="$PROJECT_DIR$/test/mockito_test.dart" />
-    </list>
-    <ignored path="$PROJECT_DIR$/out/" />
-    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
-    <option name="TRACKING_ENABLED" value="true" />
-    <option name="SHOW_DIALOG" value="false" />
-    <option name="HIGHLIGHT_CONFLICTS" value="true" />
-    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
-    <option name="LAST_RESOLUTION" value="IGNORE" />
-  </component>
-  <component name="FileEditorManager">
-    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file leaf-file-name="mockito_test.dart" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/test/mockito_test.dart">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="321">
-              <caret line="297" column="65" lean-forward="false" selection-start-line="297" selection-start-column="65" selection-end-line="297" selection-end-column="65" />
-              <folding>
-                <element signature="e#0#33800#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="mock.dart" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/lib/src/mock.dart">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="201">
-              <caret line="573" column="6" lean-forward="false" selection-start-line="573" selection-start-column="2" selection-end-line="573" selection-end-column="6" />
-              <folding>
-                <element signature="e#0#25821#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="pubspec.yaml" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/pubspec.yaml">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="195">
-              <caret line="13" column="26" lean-forward="false" selection-start-line="13" selection-start-column="26" selection-end-line="13" selection-end-column="26" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="invocation_matcher.dart" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/lib/src/invocation_matcher.dart">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="210">
-              <caret line="119" column="48" lean-forward="false" selection-start-line="119" selection-start-column="48" selection-end-line="119" selection-end-column="48" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-    </leaf>
-  </component>
-  <component name="FindInProjectRecents">
-    <findStrings>
-      <find>argThat</find>
-      <find>typed</find>
-    </findStrings>
-  </component>
-  <component name="Git.Settings">
-    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
-  </component>
-  <component name="IdeDocumentHistory">
-    <option name="CHANGED_PATHS">
-      <list>
-        <option value="$PROJECT_DIR$/lib/mockito.dart" />
-        <option value="$PROJECT_DIR$/pubspec.yaml" />
-        <option value="$PROJECT_DIR$/lib/src/invocation_matcher.dart" />
-        <option value="$PROJECT_DIR$/test/mockito_test.dart" />
-      </list>
-    </option>
-  </component>
-  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
-  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
-  <component name="JsGulpfileManager">
-    <detection-done>true</detection-done>
-    <sorting>DEFINITION_ORDER</sorting>
-  </component>
-  <component name="ProjectFrameBounds" fullScreen="true">
-    <option name="width" value="1680" />
-    <option name="height" value="1050" />
-  </component>
-  <component name="ProjectLevelVcsManager">
-    <ConfirmationsSetting value="1" id="Add" />
-  </component>
-  <component name="ProjectView">
-    <navigator currentView="ProjectPane" proportions="" version="1">
-      <flattenPackages />
-      <showMembers />
-      <showModules />
-      <showLibraryContents />
-      <hideEmptyPackages />
-      <abbreviatePackageNames />
-      <autoscrollToSource />
-      <autoscrollFromSource />
-      <sortByType />
-      <manualOrder />
-      <foldersAlwaysOnTop value="true" />
-    </navigator>
-    <panes>
-      <pane id="Scratches" />
-      <pane id="PackagesPane" />
-      <pane id="ProjectPane">
-        <subPane>
-          <expand>
-            <path>
-              <item name="dart-mockito" type="b2602c69:ProjectViewProjectNode" />
-              <item name="dart-mockito" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="dart-mockito" type="b2602c69:ProjectViewProjectNode" />
-              <item name="dart-mockito" type="462c0819:PsiDirectoryNode" />
-              <item name="lib" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="dart-mockito" type="b2602c69:ProjectViewProjectNode" />
-              <item name="dart-mockito" type="462c0819:PsiDirectoryNode" />
-              <item name="lib" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="dart-mockito" type="b2602c69:ProjectViewProjectNode" />
-              <item name="dart-mockito" type="462c0819:PsiDirectoryNode" />
-              <item name="test" type="462c0819:PsiDirectoryNode" />
-            </path>
-          </expand>
-          <select />
-        </subPane>
-      </pane>
-      <pane id="Scope" />
-    </panes>
-  </component>
-  <component name="PropertiesComponent">
-    <property name="WebServerToolWindowFactoryState" value="false" />
-    <property name="settings.editor.selected.configurable" value="dart.settings" />
-    <property name="dart.analysis.tool.window.force.activate" value="false" />
-  </component>
-  <component name="RunDashboard">
-    <option name="ruleStates">
-      <list>
-        <RuleState>
-          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
-        </RuleState>
-        <RuleState>
-          <option name="name" value="StatusDashboardGroupingRule" />
-        </RuleState>
-      </list>
-    </option>
-  </component>
-  <component name="RunManager">
-    <configuration default="true" type="Applet" factoryName="Applet">
-      <option name="HTML_USED" value="false" />
-      <option name="WIDTH" value="400" />
-      <option name="HEIGHT" value="300" />
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
-      <module />
-    </configuration>
-    <configuration default="true" type="Application" factoryName="Application">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="ENABLE_SWING_INSPECTOR" value="false" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <module name="" />
-      <envs />
-    </configuration>
-    <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
-      <module name="" />
-      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
-      <option name="PROGRAM_PARAMETERS" />
-      <predefined_log_file id="idea.log" enabled="true" />
-    </configuration>
-    <configuration default="true" type="Remote" factoryName="Remote">
-      <option name="USE_SOCKET_TRANSPORT" value="true" />
-      <option name="SERVER_MODE" value="false" />
-      <option name="SHMEM_ADDRESS" value="javadebug" />
-      <option name="HOST" value="localhost" />
-      <option name="PORT" value="5005" />
-    </configuration>
-    <configuration name="&lt;template&gt;" type="JUnit" default="true" selected="false">
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" value="-ea" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
-    </configuration>
-    <configuration name="&lt;template&gt;" type="TestNG" default="true" selected="false">
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" value="-ea" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
-    </configuration>
-  </component>
-  <component name="ShelveChangesManager" show_recycled="false">
-    <option name="remove_strategy" value="false" />
-  </component>
-  <component name="TaskManager">
-    <task active="true" id="Default" summary="Default task">
-      <changelist id="7d90fd74-c951-4612-a7f4-109d6fb83fc5" name="Default" comment="" />
-      <created>1508798659467</created>
-      <option name="number" value="Default" />
-      <option name="presentableId" value="Default" />
-      <updated>1508798659467</updated>
-      <workItem from="1508798661569" duration="33000" />
-      <workItem from="1508798703310" duration="1507000" />
-    </task>
-    <servers />
-  </component>
-  <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="1540000" />
-  </component>
-  <component name="ToolWindowManager">
-    <frame x="0" y="0" width="1680" height="1050" extended-state="0" />
-    <layout>
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
-      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.30706245" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
-      <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
-      <window_info id="Dart Analysis" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.3285568" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.21367522" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
-      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
-      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-    </layout>
-  </component>
-  <component name="TypeScriptGeneratedFilesManager">
-    <option name="version" value="1" />
-  </component>
-  <component name="VcsContentAnnotationSettings">
-    <option name="myLimit" value="2678400000" />
-  </component>
-  <component name="XDebuggerManager">
-    <breakpoint-manager />
-    <watches-manager />
-  </component>
-  <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/test/mockitoSpec.dart">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/test/mockitoSpec.dart">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="893">
-          <caret line="82" column="48" lean-forward="false" selection-start-line="82" selection-start-column="48" selection-end-line="82" selection-end-column="48" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/lib/src/invocation_matcher.dart">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="210">
-          <caret line="119" column="48" lean-forward="false" selection-start-line="119" selection-start-column="48" selection-end-line="119" selection-end-column="48" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/pubspec.yaml">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="195">
-          <caret line="13" column="26" lean-forward="false" selection-start-line="13" selection-start-column="26" selection-end-line="13" selection-end-column="26" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/lib/mockito.dart">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="165">
-          <caret line="11" column="30" lean-forward="false" selection-start-line="11" selection-start-column="30" selection-end-line="11" selection-end-column="30" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/test/mockito_test.dart">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="321">
-          <caret line="297" column="65" lean-forward="false" selection-start-line="297" selection-start-column="65" selection-end-line="297" selection-end-column="65" />
-          <folding>
-            <element signature="e#0#33800#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/lib/src/mock.dart">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="201">
-          <caret line="573" column="6" lean-forward="false" selection-start-line="573" selection-start-column="2" selection-end-line="573" selection-end-column="6" />
-          <folding>
-            <element signature="e#0#25821#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-  </component>
-  <component name="masterDetails">
-    <states>
-      <state key="ProjectJDKs.UI">
-        <settings>
-          <splitter-proportions>
-            <option name="proportions">
-              <list>
-                <option value="0.2" />
-              </list>
-            </option>
-          </splitter-proportions>
-        </settings>
-      </state>
-    </states>
-  </component>
-</project>
\ No newline at end of file
diff --git a/mockito/.travis.yml b/mockito/.travis.yml
index 6abd11c..103a8a0 100644
--- a/mockito/.travis.yml
+++ b/mockito/.travis.yml
@@ -1,7 +1,5 @@
 language: dart
 sudo: false
 dart:
-  - stable
   - dev
-  - 1.21.1
 script: ./tool/travis.sh
diff --git a/mockito/BUILD.gn b/mockito/BUILD.gn
index 1d5672f..fb3578d 100644
--- a/mockito/BUILD.gn
+++ b/mockito/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for mockito-2.2.1
+# This file is generated by importer.py for mockito-2.2.3
 
 import("//build/dart/dart_library.gni")
 
diff --git a/mockito/CHANGELOG.md b/mockito/CHANGELOG.md
index 4f4bc0a..0f0209e 100644
--- a/mockito/CHANGELOG.md
+++ b/mockito/CHANGELOG.md
@@ -1,3 +1,17 @@
+## 2.2.3
+
+* Avoid generlized void isses. Fixes Mockito's compliance with Dart SDK
+  2.0.0-dev.23.0.
+
+## 2.2.2
+
+* Remove last violation of `USES_DYNAMIC_AS_BOTTOM` error. This should make
+  Mockito compatible with Dart 2 semantics.
+
+## 2.2.1
+
+* Internal fixes only (stop using comment-based generic method syntax).
+
 ## 2.2.0
 
 * Add new feature to wait for an interaction: `untilCalled`. See the README for
diff --git a/mockito/dart-mockito.iml b/mockito/dart-mockito.iml
deleted file mode 100644
index 5a5ced2..0000000
--- a/mockito/dart-mockito.iml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="WEB_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <excludeFolder url="file://$MODULE_DIR$/.pub" />
-      <excludeFolder url="file://$MODULE_DIR$/build" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Dart SDK" level="project" />
-    <orderEntry type="library" name="Dart Packages" level="project" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/mockito/lib/src/mock.dart b/mockito/lib/src/mock.dart
index 4a6bfb8..8dfd0d3 100644
--- a/mockito/lib/src/mock.dart
+++ b/mockito/lib/src/mock.dart
@@ -597,9 +597,9 @@
 
 typedef dynamic Answering(Invocation realInvocation);
 
-typedef VerificationResult Verification(matchingInvocations);
+typedef Verification = VerificationResult Function<T>(T matchingInvocations);
 
-typedef void _InOrderVerification(List<dynamic> recordedInvocations);
+typedef _InOrderVerification = void Function<T>(List<T> recordedInvocations);
 
 /// Verify that a method on a mock object was never called with the given
 /// arguments.
@@ -645,7 +645,7 @@
     throw new StateError(_verifyCalls.join());
   }
   _verificationInProgress = true;
-  return (mock) {
+  return <T>(T mock) {
     _verificationInProgress = false;
     if (_verifyCalls.length == 1) {
       _VerifyCall verifyCall = _verifyCalls.removeLast();
@@ -664,10 +664,10 @@
     throw new StateError(_verifyCalls.join());
   }
   _verificationInProgress = true;
-  return (List<dynamic> _) {
+  return <T>(List<T> _) {
     _verificationInProgress = false;
     DateTime dt = new DateTime.fromMillisecondsSinceEpoch(0);
-    var tmpVerifyCalls = new List.from(_verifyCalls);
+    var tmpVerifyCalls = new List<_VerifyCall>.from(_verifyCalls);
     _verifyCalls.clear();
     List<RealCall> matchedCalls = [];
     for (_VerifyCall verifyCall in tmpVerifyCalls) {
@@ -710,7 +710,7 @@
   }
 }
 
-typedef PostExpectation Expectation(x);
+typedef Expectation = PostExpectation Function<T>(T x);
 
 /// Create a stub method response.
 ///
@@ -734,13 +734,13 @@
     throw new StateError('Cannot call `when` within a stub response');
   }
   _whenInProgress = true;
-  return (_) {
+  return <T>(T _) {
     _whenInProgress = false;
     return new PostExpectation();
   };
 }
 
-typedef Future<Invocation> InvocationLoader(_);
+typedef InvocationLoader = Future<Invocation> Function<T>(T _);
 
 /// Returns a future [Invocation] that will complete upon the first occurrence
 /// of the given invocation.
@@ -757,7 +757,7 @@
 /// future will return immediately.
 InvocationLoader get untilCalled {
   _untilCalledInProgress = true;
-  return (_) {
+  return <T>(T _) {
     _untilCalledInProgress = false;
     return _untilCall.invocationFuture;
   };
diff --git a/mockito/pubspec.yaml b/mockito/pubspec.yaml
index b417673..ced23b5 100644
--- a/mockito/pubspec.yaml
+++ b/mockito/pubspec.yaml
@@ -1,12 +1,12 @@
 name: mockito
-version: 2.2.1
+version: 2.2.3
 authors:
   - Dmitriy Fibulwinter <fibulwinter@gmail.com>
   - Dart Team <misc@dartlang.org>
 description: A mock framework inspired by Mockito.
 homepage: https://github.com/dart-lang/mockito
 environment:
-  sdk: '>=1.21.0 <2.0.0'
+  sdk: '>=2.0.0-dev.16.0 <2.0.0'
 dependencies:
   collection: '^1.1.0'
   matcher: '^0.12.0'
diff --git a/platform/BUILD.gn b/platform/BUILD.gn
index fbe0989..7c32209 100644
--- a/platform/BUILD.gn
+++ b/platform/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for platform-2.1.1
+# This file is generated by importer.py for platform-2.1.2
 
 import("//build/dart/dart_library.gni")
 
diff --git a/platform/CHANGELOG.md b/platform/CHANGELOG.md
index 3c99300..a16b333 100644
--- a/platform/CHANGELOG.md
+++ b/platform/CHANGELOG.md
@@ -1,3 +1,7 @@
+### 2.1.2
+
+* Relax sdk upper bound constraint to  '<2.0.0' to allow 'edge' dart sdk use.
+
 ### 2.1.1
 
 * Bumped maximum Dart SDK version to 2.0.0-dev.infinity
diff --git a/platform/pubspec.yaml b/platform/pubspec.yaml
index f12e9f1..a841972 100644
--- a/platform/pubspec.yaml
+++ b/platform/pubspec.yaml
@@ -1,5 +1,5 @@
 name: platform
-version: 2.1.1
+version: 2.1.2
 authors:
 - Todd Volkert <tvolkert@google.com>
 description: A pluggable, mockable platform abstraction for Dart.
@@ -9,4 +9,4 @@
   test: ^0.12.10
 
 environment:
-  sdk: '>=1.24.0-dev.0.0 <2.0.0-dev.infinity '
+  sdk: '>=1.24.0-dev.0.0 <2.0.0'
diff --git a/test/BUILD.gn b/test/BUILD.gn
index 30af258..90f6d53 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for test-0.12.30+1
+# This file is generated by importer.py for test-0.12.30+3
 
 import("//build/dart/dart_library.gni")
 
diff --git a/test/CHANGELOG.md b/test/CHANGELOG.md
index 6ed8fb5..fd8ff1c 100644
--- a/test/CHANGELOG.md
+++ b/test/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 0.12.30+3
+
+* Fix a memory leak when loading browser tests.
+
+## 0.12.30+2
+
+* Avoid loading test suites whose tags are excluded by `--excluded-tags`.
+
 ## 0.12.30+1
 
 * Internal changes.
diff --git a/test/lib/src/runner/browser/dartium.dart b/test/lib/src/runner/browser/dartium.dart
index e785231..8cd8d1e 100644
--- a/test/lib/src/runner/browser/dartium.dart
+++ b/test/lib/src/runner/browser/dartium.dart
@@ -150,8 +150,15 @@
     /// check whether it's actually connected to an isolate, indicating that
     /// it's the observatory for the main page. Once we find the one that is, we
     /// cancel the other requests and return it.
-    return (await inCompletionOrder(operations)
-        .firstWhere((url) => url != null, defaultValue: () => null)) as Uri;
+    ///
+    /// Use try/catch rather than `defaultValue` in `firstWhere` since the
+    /// parameter name will change in Dart 2.0.
+    try {
+      return (await inCompletionOrder(operations)
+          .firstWhere((url) => url != null)) as Uri;
+    } on StateError catch (_) {
+      return null;
+    }
   }
 
   /// If the URL returned by [future] corresponds to the correct Observatory
diff --git a/test/lib/src/runner/browser/post_message_channel.dart b/test/lib/src/runner/browser/post_message_channel.dart
index 50149eb..fc45376 100644
--- a/test/lib/src/runner/browser/post_message_channel.dart
+++ b/test/lib/src/runner/browser/post_message_channel.dart
@@ -2,10 +2,19 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:html';
+@JS()
+library test.src.runner.browser.post_message_channel;
 
+import 'dart:html';
+import 'dart:js_util';
+
+import 'package:js/js.dart';
 import 'package:stream_channel/stream_channel.dart';
 
+// Avoid using this from dart:html to work around dart-lang/sdk#32113.
+@JS("window.parent.postMessage")
+external void _postParentMessage(Object message, String targetOrigin);
+
 /// Constructs a [StreamChannel] wrapping `postMessage` communication with the
 /// host page.
 StreamChannel postMessageChannel() {
@@ -25,14 +34,14 @@
   controller.local.stream.listen((data) {
     // TODO(nweiz): Stop manually adding href here once issue 22554 is
     // fixed.
-    window.parent.postMessage(
-        {"href": window.location.href, "data": data}, window.location.origin);
+    _postParentMessage(jsify({"href": window.location.href, "data": data}),
+        window.location.origin);
   });
 
   // Send a ready message once we're listening so the host knows it's safe to
   // start sending events.
-  window.parent.postMessage(
-      {"href": window.location.href, "ready": true}, window.location.origin);
+  _postParentMessage(jsify({"href": window.location.href, "ready": true}),
+      window.location.origin);
 
   return controller.foreign;
 }
diff --git a/test/lib/src/runner/loader.dart b/test/lib/src/runner/loader.dart
index 31b1a99..fd9929e 100644
--- a/test/lib/src/runner/loader.dart
+++ b/test/lib/src/runner/loader.dart
@@ -211,6 +211,10 @@
       return;
     }
 
+    if (_config.suiteDefaults.excludeTags.evaluate(suiteConfig.metadata.tags)) {
+      return;
+    }
+
     if (_config.pubServeUrl != null && !p.isWithin('test', path)) {
       yield new LoadSuite.forLoadException(
           new LoadException(
diff --git a/test/pubspec.yaml b/test/pubspec.yaml
index 80f14c1..d595e3b 100644
--- a/test/pubspec.yaml
+++ b/test/pubspec.yaml
@@ -1,5 +1,5 @@
 name: test
-version: 0.12.30+1
+version: 0.12.30+3
 author: Dart Team <misc@dartlang.org>
 description: A library for writing dart unit tests.
 homepage: https://github.com/dart-lang/test
diff --git a/test/tool/host.dart b/test/tool/host.dart
index 5234147..53350d9 100644
--- a/test/tool/host.dart
+++ b/test/tool/host.dart
@@ -48,6 +48,9 @@
 /// The iframes created for each loaded test suite, indexed by the suite id.
 final _iframes = new Map<int, IFrameElement>();
 
+/// Subscriptions created for each loaded test suite, indexed by the suite id.
+final _subscriptions = new Map<int, List<StreamSubscription>>();
+
 /// The URL for the current page.
 final _currentUrl = Uri.parse(window.location.href);
 
@@ -124,7 +127,11 @@
         document.body.classes.remove('paused');
       } else {
         assert(message['command'] == 'closeSuite');
-        _iframes[message['id']].remove();
+        _iframes.remove(message['id']).remove();
+
+        for (var subscription in _subscriptions.remove(message['id'])) {
+          subscription.cancel();
+        }
       }
     });
 
@@ -184,9 +191,12 @@
   // message to us. This ensures that no messages get dropped on the floor.
   var readyCompleter = new Completer();
 
+  var subscriptions = <StreamSubscription>[];
+  _subscriptions[id] = subscriptions;
+
   // TODO(nweiz): use MessageChannel once Firefox supports it
   // (http://caniuse.com/#search=MessageChannel).
-  window.onMessage.listen((message) {
+  subscriptions.add(window.onMessage.listen((message) {
     // A message on the Window can theoretically come from any website. It's
     // very unlikely that a malicious site would care about hacking someone's
     // unit tests, let alone be able to find the test server while it's
@@ -205,13 +215,13 @@
     } else {
       controller.local.sink.add(message.data["data"]);
     }
-  });
+  }));
 
-  controller.local.stream.listen((message) async {
+  subscriptions.add(controller.local.stream.listen((message) async {
     await readyCompleter.future;
 
     iframe.contentWindow.postMessage(message, window.location.origin);
-  });
+  }));
 
   return controller.foreign;
 }
diff --git a/typed_data/.travis.yml b/typed_data/.travis.yml
new file mode 100644
index 0000000..aa7342b
--- /dev/null
+++ b/typed_data/.travis.yml
@@ -0,0 +1,17 @@
+language: dart
+dart:
+  - dev
+  - stable
+
+dart_task:
+  - test: -p vm,firefox
+  - dartfmt
+  - analyzer
+
+# Only building master means that we don't run two builds for each pull request.
+branches:
+  only: [master]
+
+cache:
+ directories:
+   - $HOME/.pub-cache
diff --git a/typed_data/BUILD.gn b/typed_data/BUILD.gn
index 3fbccf3..4838af7 100644
--- a/typed_data/BUILD.gn
+++ b/typed_data/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for typed_data-1.1.4
+# This file is generated by importer.py for typed_data-1.1.5
 
 import("//build/dart/dart_library.gni")
 
diff --git a/typed_data/CHANGELOG.md b/typed_data/CHANGELOG.md
index 8d40dc4..5f92914 100644
--- a/typed_data/CHANGELOG.md
+++ b/typed_data/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.5
+
+* Undo unnessesary SDK version constraint tweak.
+
 ## 1.1.4
 
 * Expand the SDK version constraint to include `<2.0.0-dev.infinity`.
diff --git a/typed_data/lib/typed_buffers.dart b/typed_data/lib/typed_buffers.dart
index 0951480..23f2cbb 100644
--- a/typed_data/lib/typed_buffers.dart
+++ b/typed_data/lib/typed_buffers.dart
@@ -36,12 +36,12 @@
         this._length = buffer.length;
 
   int get length => _length;
-  E operator[](int index) {
+  E operator [](int index) {
     if (index >= length) throw new RangeError.index(index, this);
     return _buffer[index];
   }
 
-  void operator[]=(int index, E value) {
+  void operator []=(int index, E value) {
     if (index >= length) throw new RangeError.index(index, this);
     _buffer[index] = value;
   }
@@ -73,7 +73,9 @@
   // We override the default implementation of `add` because it grows the list
   // by setting the length in increments of one. We want to grow by doubling
   // capacity in most cases.
-  void add(E value) { _add(value); }
+  void add(E value) {
+    _add(value);
+  }
 
   /// Appends all objects of [values] to the end of this buffer.
   ///
@@ -112,7 +114,6 @@
       if (start == end) return;
     }
 
-
     // If we're adding to the end of the list anyway, use [_addAll]. This lets
     // us avoid converting [values] into a list even if [end] is null, since we
     // can add values iteratively to the end of the list. We can't do so in the
@@ -162,7 +163,7 @@
 
   // Reverses the range [start..end) of buffer.
   static void _reverse(List buffer, int start, int end) {
-    end--;  // Point to last element, not after last element.
+    end--; // Point to last element, not after last element.
     while (start < end) {
       var first = buffer[start];
       var last = buffer[end];
@@ -311,13 +312,13 @@
 }
 
 abstract class _IntBuffer extends _TypedDataBuffer<int> {
-  _IntBuffer(List<int> buffer): super(buffer);
+  _IntBuffer(List<int> buffer) : super(buffer);
 
   int get _defaultValue => 0;
 }
 
 abstract class _FloatBuffer extends _TypedDataBuffer<double> {
-  _FloatBuffer(List<double> buffer): super(buffer);
+  _FloatBuffer(List<double> buffer) : super(buffer);
 
   double get _defaultValue => 0.0;
 }
diff --git a/typed_data/pubspec.yaml b/typed_data/pubspec.yaml
index 59b3cc0..78bc786 100644
--- a/typed_data/pubspec.yaml
+++ b/typed_data/pubspec.yaml
@@ -1,9 +1,9 @@
 name: typed_data
-version: 1.1.4
+version: 1.1.5
 author: Dart Team <misc@dartlang.org>
 description: Utility functions and classes related to the 'dart:typed_data' library.
 homepage: https://github.com/dart-lang/typed_data
 dev_dependencies:
   test: "^0.12.0"
 environment:
-  sdk: ">=1.8.0 <2.0.0-dev.infinity"
+  sdk: ">=1.8.0 <2.0.0"
diff --git a/utf/.gitignore b/utf/.gitignore
index 4232a2f..52f0c5b 100644
--- a/utf/.gitignore
+++ b/utf/.gitignore
@@ -1,4 +1,3 @@
 .packages
 .pub/
-packages
 pubspec.lock
diff --git a/utf/.status b/utf/.status
deleted file mode 100644
index ebc5f81..0000000
--- a/utf/.status
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Skip non-test files ending with "_test".
-packages/*: Skip
-*/packages/*: Skip
-*/*/packages/*: Skip
-*/*/*/packages/*: Skip
-*/*/*/*packages/*: Skip
-*/*/*/*/*packages/*: Skip
-
diff --git a/utf/.travis.yml b/utf/.travis.yml
new file mode 100644
index 0000000..16cd8fd
--- /dev/null
+++ b/utf/.travis.yml
@@ -0,0 +1,18 @@
+language: dart
+
+dart:
+  - dev
+
+dart_task:
+  - test
+  - test: --platform firefox -j 1
+  - dartanalyzer: --fatal-infos --fatal-warnings .
+  - dartfmt
+
+# Only building master means that we don't run two builds for each pull request.
+branches:
+  only: [master]
+
+cache:
+ directories:
+   - $HOME/.pub-cache
diff --git a/utf/BUILD.gn b/utf/BUILD.gn
index 1d113da..80de3f5 100644
--- a/utf/BUILD.gn
+++ b/utf/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for utf-0.9.0+3
+# This file is generated by importer.py for utf-0.9.0+4
 
 import("//build/dart/dart_library.gni")
 
diff --git a/utf/CHANGELOG.md b/utf/CHANGELOG.md
index 028311f..ea482a6 100644
--- a/utf/CHANGELOG.md
+++ b/utf/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 0.9.0+4
+
+* Updates to support Dart 2.0 core library changes (wave
+  2.2). Package now requires Dart `2.0.0-dev.20.0`.
+  See [issue 31847][sdk#31847] for details.
+
+  [sdk#31847]: https://github.com/dart-lang/sdk/issues/31847
+
 ## 0.9.0+3
 
 * Code cleanup.
diff --git a/utf/analysis_options.yaml b/utf/analysis_options.yaml
new file mode 100644
index 0000000..0c32448
--- /dev/null
+++ b/utf/analysis_options.yaml
@@ -0,0 +1,40 @@
+analyzer:
+  strong-mode:
+    implicit-casts: false
+  errors:
+    dead_code: error
+    override_on_non_overriding_method: error
+    unused_element: error
+    unused_import: error
+    unused_local_variable: error
+linter:
+  rules:
+    #- annotate_overrides
+    - avoid_empty_else
+    - avoid_init_to_null
+    - avoid_return_types_on_setters
+    - await_only_futures
+    - camel_case_types
+    - comment_references
+    - control_flow_in_finally
+    - directives_ordering
+    - empty_catches
+    - empty_constructor_bodies
+    - empty_statements
+    - hash_and_equals
+    - implementation_imports
+    - library_names
+    - library_prefixes
+    - non_constant_identifier_names
+    #- omit_local_variable_types
+    - only_throw_errors
+    - prefer_final_fields
+    - prefer_is_not_empty
+    #- prefer_single_quotes
+    #- slash_for_doc_comments
+    - test_types_in_equals
+    - test_types_in_equals
+    - throw_in_finally
+    - type_init_formals
+    - unrelated_type_equality_checks
+    - valid_regexps
diff --git a/utf/codereview.settings b/utf/codereview.settings
deleted file mode 100644
index b55fcbd..0000000
--- a/utf/codereview.settings
+++ /dev/null
@@ -1,3 +0,0 @@
-CODE_REVIEW_SERVER: http://codereview.chromium.org/
-VIEW_VC: https://github.com/dart-lang/utf/commit/
-CC_LIST: reviews@dartlang.org
diff --git a/utf/lib/src/list_range.dart b/utf/lib/src/list_range.dart
index 159512d..3f211d8 100644
--- a/utf/lib/src/list_range.dart
+++ b/utf/lib/src/list_range.dart
@@ -18,7 +18,7 @@
   final int _offset;
   final int _length;
 
-  ListRange(List<int> source, [offset = 0, length])
+  ListRange(List<int> source, [int offset = 0, int length])
       : this._source = source,
         this._offset = offset,
         this._length = (length == null ? source.length - offset : length) {
diff --git a/utf/lib/src/utf16.dart b/utf/lib/src/utf16.dart
index 87ba12a..9d63fb0 100644
--- a/utf/lib/src/utf16.dart
+++ b/utf/lib/src/utf16.dart
@@ -242,7 +242,7 @@
   // TODO(kevmoo): should this field be private?
   final ListRangeIterator utf16EncodedBytesIterator;
   final int replacementCodepoint;
-  int _current = null;
+  int _current;
 
   Utf16BytesToCodeUnitsDecoder._fromListRangeIterator(
       this.utf16EncodedBytesIterator, this.replacementCodepoint);
diff --git a/utf/lib/src/utf32.dart b/utf/lib/src/utf32.dart
index 68370c7..bf7d341 100644
--- a/utf/lib/src/utf32.dart
+++ b/utf/lib/src/utf32.dart
@@ -218,7 +218,7 @@
   // TODO(kevmoo): should this field be private?
   final ListRangeIterator utf32EncodedBytesIterator;
   final int replacementCodepoint;
-  int _current = null;
+  int _current;
 
   Utf32BytesDecoder._fromListRangeIterator(
       this.utf32EncodedBytesIterator, this.replacementCodepoint);
diff --git a/utf/lib/src/utf8.dart b/utf/lib/src/utf8.dart
index ecf8707..970c166 100644
--- a/utf/lib/src/utf8.dart
+++ b/utf/lib/src/utf8.dart
@@ -147,7 +147,7 @@
 
   IterableUtf8Decoder(this.bytes,
       [this.offset = 0,
-      this.length = null,
+      this.length,
       this.replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]);
 
   Utf8Decoder get iterator =>
@@ -166,7 +166,7 @@
   // TODO(kevmoo): should this field be private?
   final ListRangeIterator utf8EncodedBytesIterator;
   final int replacementCodepoint;
-  int _current = null;
+  int _current;
 
   Utf8Decoder(List<int> utf8EncodedBytes,
       [int offset = 0,
diff --git a/utf/lib/src/utf_16_code_unit_decoder.dart b/utf/lib/src/utf_16_code_unit_decoder.dart
index 7d9e98f..28c150e 100644
--- a/utf/lib/src/utf_16_code_unit_decoder.dart
+++ b/utf/lib/src/utf_16_code_unit_decoder.dart
@@ -17,18 +17,17 @@
   // TODO(kevmoo): should this field be private?
   final ListRangeIterator utf16CodeUnitIterator;
   final int replacementCodepoint;
-  int _current = null;
+  int _current;
 
   Utf16CodeUnitDecoder(List<int> utf16CodeUnits,
       [int offset = 0,
       int length,
-      int this.replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT])
+      this.replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT])
       : utf16CodeUnitIterator =
             (new ListRange(utf16CodeUnits, offset, length)).iterator;
 
   Utf16CodeUnitDecoder.fromListRangeIterator(
-      ListRangeIterator this.utf16CodeUnitIterator,
-      int this.replacementCodepoint);
+      this.utf16CodeUnitIterator, this.replacementCodepoint);
 
   Iterator<int> get iterator => this;
 
diff --git a/utf/lib/src/utf_stream.dart b/utf/lib/src/utf_stream.dart
index 83e442f..e39a088 100644
--- a/utf/lib/src/utf_stream.dart
+++ b/utf/lib/src/utf_stream.dart
@@ -10,15 +10,15 @@
 import 'util.dart';
 
 // TODO(floitsch): make this transformer reusable.
-abstract class _StringDecoder
-    implements StreamTransformer<List<int>, String>, EventSink<List<int>> {
+abstract class _StringDecoder extends StreamTransformerBase<List<int>, String>
+    implements EventSink<List<int>> {
   List<int> _carry;
   List<int> _buffer;
   int _replacementChar;
 
   EventSink<String> _outSink;
 
-  _StringDecoder(int this._replacementChar);
+  _StringDecoder(this._replacementChar);
 
   Stream<String> bind(Stream<List<int>> stream) {
     return new Stream<String>.eventTransformed(stream,
@@ -52,6 +52,7 @@
           }
           return null;
         }
+
         int consumed = _processBytes(getNext);
         if (consumed > 0) {
           goodChars = _buffer.length;
@@ -108,6 +109,7 @@
         throw new ArgumentError('Invalid codepoint');
       }
     }
+
     if (char < 0) error();
     if (char >= 0xD800 && char <= 0xDFFF) error();
     if (char > 0x10FFFF) error();
@@ -176,8 +178,8 @@
   }
 }
 
-abstract class _StringEncoder
-    implements StreamTransformer<String, List<int>>, EventSink<String> {
+abstract class _StringEncoder extends StreamTransformerBase<String, List<int>>
+    implements EventSink<String> {
   EventSink<List<int>> _outSink;
 
   Stream<List<int>> bind(Stream<String> stream) {
diff --git a/utf/lib/utf.dart b/utf/lib/utf.dart
index 40ffcfe..671e17c 100644
--- a/utf/lib/utf.dart
+++ b/utf/lib/utf.dart
@@ -10,8 +10,8 @@
 
 export 'src/constants.dart';
 export 'src/shared.dart';
-export 'src/utf_16_code_unit_decoder.dart';
-export 'src/utf_stream.dart';
 export 'src/utf16.dart';
 export 'src/utf32.dart';
 export 'src/utf8.dart';
+export 'src/utf_16_code_unit_decoder.dart';
+export 'src/utf_stream.dart';
diff --git a/utf/pubspec.yaml b/utf/pubspec.yaml
index 8fb2c51..042fb49 100644
--- a/utf/pubspec.yaml
+++ b/utf/pubspec.yaml
@@ -1,10 +1,10 @@
 name: utf
-version: 0.9.0+3
+version: 0.9.0+4
 author: Dart Team <misc@dartlang.org>
 description: >
  Provides common operations for manipulating Unicode sequences
 homepage: https://www.github.com/dart-lang/utf
 environment:
-  sdk: '>=1.0.0 <2.0.0'
+  sdk: '>=2.0.0-dev.20.0 <2.0.0'
 dev_dependencies:
   test: ^0.12.0
diff --git a/video_player/BUILD.gn b/video_player/BUILD.gn
index efd5e9d..fc20cb6 100644
--- a/video_player/BUILD.gn
+++ b/video_player/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for video_player-0.1.1
+# This file is generated by importer.py for video_player-0.2.1
 
 import("//build/dart/dart_library.gni")
 
diff --git a/video_player/CHANGELOG.md b/video_player/CHANGELOG.md
index 91f16b5..30ce922 100644
--- a/video_player/CHANGELOG.md
+++ b/video_player/CHANGELOG.md
@@ -1,3 +1,14 @@
+## 0.2.1
+
+* Fixed some signatures to account for strong mode runtime errors.
+* Fixed spelling mistake in toString output.
+
+## 0.2.0
+
+* **Breaking change**. Renamed `VideoPlayerController.isErroneous` to `VideoPlayerController.hasError`.
+* Updated documentation of when fields are available on `VideoPlayerController`.
+* Updated links in README.md.
+
 ## 0.1.1
 
 * Simplified and upgraded Android project template to Android SDK 27.
diff --git a/video_player/example/ios/.gitignore b/video_player/example/ios/.gitignore
index 38864ee..8877902 100644
--- a/video_player/example/ios/.gitignore
+++ b/video_player/example/ios/.gitignore
@@ -31,11 +31,12 @@
 Icon?
 .tags*
 
-/Flutter/app.flx
 /Flutter/app.zip
 /Flutter/App.framework
 /Flutter/Flutter.framework
+/Flutter/flutter_assets/
 /Flutter/Generated.xcconfig
 /ServiceDefinitions.json
 
 Pods/
+Podfile
diff --git a/video_player/example/ios/Podfile b/video_player/example/ios/Podfile
deleted file mode 100644
index 90b5f65..0000000
--- a/video_player/example/ios/Podfile
+++ /dev/null
@@ -1,36 +0,0 @@
-# Uncomment this line to define a global platform for your project
-# platform :ios, '9.0'
-
-if ENV['FLUTTER_FRAMEWORK_DIR'] == nil
-  abort('Please set FLUTTER_FRAMEWORK_DIR to the directory containing Flutter.framework')
-end
-
-target 'Runner' do
-  # Pods for Runner
-
-  # Flutter Pods
-  pod 'Flutter', :path => ENV['FLUTTER_FRAMEWORK_DIR']
-
-  if File.exists? '../.flutter-plugins'
-    flutter_root = File.expand_path('..')
-    File.foreach('../.flutter-plugins') { |line|
-      plugin = line.split(pattern='=')
-      if plugin.length == 2
-        name = plugin[0].strip()
-        path = plugin[1].strip()
-        resolved_path = File.expand_path("#{path}/ios", flutter_root)
-        pod name, :path => resolved_path
-      else
-        puts "Invalid plugin specification: #{line}"
-      end
-    }
-  end
-end
-
-post_install do |installer|
-  installer.pods_project.targets.each do |target|
-    target.build_configurations.each do |config|
-      config.build_settings['ENABLE_BITCODE'] = 'NO'
-    end
-  end
-end
diff --git a/video_player/example/lib/main.dart b/video_player/example/lib/main.dart
index 7fb1109..59920bd 100644
--- a/video_player/example/lib/main.dart
+++ b/video_player/example/lib/main.dart
@@ -172,7 +172,7 @@
     super.initState();
     controller = new VideoPlayerController(widget.uri);
     controller.addListener(() {
-      if (controller.value.isErroneous) {
+      if (controller.value.hasError) {
         print(controller.value.errorDescription);
       }
     });
diff --git a/video_player/lib/video_player.dart b/video_player/lib/video_player.dart
index 101c6cb..0c9b844 100644
--- a/video_player/lib/video_player.dart
+++ b/video_player/lib/video_player.dart
@@ -11,7 +11,7 @@
 final MethodChannel _channel = const MethodChannel('flutter.io/videoPlayer')
   // This will clear all open videos on the platform when a full restart is
   // performed.
-  ..invokeMethod("init");
+  ..invokeMethod('init');
 
 class DurationRange {
   DurationRange(this.start, this.end);
@@ -31,14 +31,37 @@
   String toString() => '$runtimeType(start: $start, end: $end)';
 }
 
+/// The duration, current position, buffering state, error state and settings
+/// of a [VideoPlayerController].
 class VideoPlayerValue {
+  /// The total duration of the video.
+  ///
+  /// Is null when [initialized] is false.
   final Duration duration;
+
+  /// The current playback position.
   final Duration position;
+
+  /// The currently buffered ranges.
   final List<DurationRange> buffered;
+
+  /// True if the video is playing. False if it's paused.
   final bool isPlaying;
+
+  /// True if the video is looping.
   final bool isLooping;
+
+  /// The current volume of the playback.
   final double volume;
+
+  /// A description of the error if present.
+  ///
+  /// If [hasError] is false this is [null].
   final String errorDescription;
+
+  /// The [size] of the currently loaded video.
+  ///
+  /// Is null when [initialized] is false.
   final Size size;
 
   VideoPlayerValue({
@@ -58,7 +81,7 @@
       : this(duration: null, errorDescription: errorDescription);
 
   bool get initialized => duration != null;
-  bool get isErroneous => errorDescription != null;
+  bool get hasError => errorDescription != null;
   double get aspectRatio => size.width / size.height;
 
   VideoPlayerValue copyWith({
@@ -90,7 +113,7 @@
         'size: $size, '
         'position: $position, '
         'buffered: [${buffered.join(', ')}], '
-        'isplaying: $isPlaying, '
+        'isPlaying: $isPlaying, '
         'isLooping: $isLooping, '
         'volume: $volume, '
         'errorDescription: $errorDescription)';
@@ -113,7 +136,7 @@
   Timer timer;
   bool isDisposed = false;
   Completer<Null> _creatingCompleter;
-  StreamSubscription<Map<String, dynamic>> _eventSubscription;
+  StreamSubscription<dynamic> _eventSubscription;
   _VideoAppLifeCycleObserver _lifeCycleObserver;
 
   VideoPlayerController(this.uri) : super(new VideoPlayerValue(duration: null));
@@ -122,42 +145,48 @@
     _lifeCycleObserver = new _VideoAppLifeCycleObserver(this);
     _lifeCycleObserver.initialize();
     _creatingCompleter = new Completer<Null>();
-    final Map<String, dynamic> response = await _channel.invokeMethod(
+    final Map<dynamic, dynamic> response = await _channel.invokeMethod(
       'create',
       <String, dynamic>{'dataSource': uri},
     );
-    _textureId = response["textureId"];
+    _textureId = response['textureId'];
     _creatingCompleter.complete(null);
 
-    DurationRange toDurationRange(List<int> values) {
+    DurationRange toDurationRange(dynamic value) {
+      final List<dynamic> pair = value;
       return new DurationRange(
-        new Duration(milliseconds: values[0]),
-        new Duration(milliseconds: values[1]),
+        new Duration(milliseconds: pair[0]),
+        new Duration(milliseconds: pair[1]),
       );
     }
 
     void eventListener(dynamic event) {
-      final Map<String, dynamic> map = event;
-      if (map["event"] == "initialized") {
-        value = value.copyWith(
-          duration: new Duration(milliseconds: map["duration"]),
-          size: new Size(map["width"].toDouble(), map["height"].toDouble()),
-        );
-        _applyLooping();
-        _applyVolume();
-        _applyPlayPause();
-      } else if (map["event"] == "completed") {
-        value = value.copyWith(isPlaying: false);
-        timer?.cancel();
-      } else if (map["event"] == "bufferingUpdate") {
-        final List<List<int>> bufferedValues = map["values"];
-        value = value.copyWith(
-          buffered: bufferedValues.map(toDurationRange).toList(),
-        );
+      final Map<dynamic, dynamic> map = event;
+      switch (map['event']) {
+        case 'initialized':
+          value = value.copyWith(
+            duration: new Duration(milliseconds: map['duration']),
+            size: new Size(map['width'].toDouble(), map['height'].toDouble()),
+          );
+          _applyLooping();
+          _applyVolume();
+          _applyPlayPause();
+          break;
+        case 'completed':
+          value = value.copyWith(isPlaying: false);
+          timer?.cancel();
+          break;
+        case 'bufferingUpdate':
+          final List<dynamic> values = map['values'];
+          value = value.copyWith(
+            buffered: values.map<DurationRange>(toDurationRange).toList(),
+          );
+          break;
       }
     }
 
-    void errorListener(PlatformException e) {
+    void errorListener(Object obj) {
+      final PlatformException e = obj;
       value = new VideoPlayerValue.erroneous(e.message);
       timer?.cancel();
     }
@@ -168,7 +197,7 @@
   }
 
   EventChannel _eventChannelFor(int textureId) {
-    return new EventChannel("flutter.io/videoPlayer/videoEvents$textureId");
+    return new EventChannel('flutter.io/videoPlayer/videoEvents$textureId');
   }
 
   @override
diff --git a/video_player/pubspec.yaml b/video_player/pubspec.yaml
index e79e1fd..c1dedec 100644
--- a/video_player/pubspec.yaml
+++ b/video_player/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Flutter plugin for displaying inline video with other Flutter
   widgets on Android and iOS.
 author: Flutter Team <flutter-dev@googlegroups.com>
-version: 0.1.1
+version: 0.2.1
 homepage: https://github.com/flutter/plugins/tree/master/packages/video_player
 
 flutter:
diff --git a/vm_service_client/BUILD.gn b/vm_service_client/BUILD.gn
index 554f69a..6cbfb37 100644
--- a/vm_service_client/BUILD.gn
+++ b/vm_service_client/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for vm_service_client-0.2.4
+# This file is generated by importer.py for vm_service_client-0.2.4+1
 
 import("//build/dart/dart_library.gni")
 
diff --git a/vm_service_client/CHANGELOG.md b/vm_service_client/CHANGELOG.md
index f508891..5df5c56 100644
--- a/vm_service_client/CHANGELOG.md
+++ b/vm_service_client/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 0.2.4+1
+
+* Updates to support Dart 2.0 core library changes (wave
+  2.2). See [issue 31847][sdk#31847] for details.
+  
+  [sdk#31847]: https://github.com/dart-lang/sdk/issues/31847
+
 ## 0.2.4
 
 * Internal changes only.
diff --git a/vm_service_client/lib/src/v1_compatibility.dart b/vm_service_client/lib/src/v1_compatibility.dart
index 0d42f15..8007be0 100644
--- a/vm_service_client/lib/src/v1_compatibility.dart
+++ b/vm_service_client/lib/src/v1_compatibility.dart
@@ -6,7 +6,7 @@
 
 const v1CompatibilityTransformer = const _V1CompatibilityTransformer();
 
-class _V1CompatibilityTransformer implements StreamTransformer {
+class _V1CompatibilityTransformer extends StreamTransformerBase {
   const _V1CompatibilityTransformer();
 
   Stream bind(Stream stream) {
diff --git a/vm_service_client/pubspec.yaml b/vm_service_client/pubspec.yaml
index 2d5ff6d..bb74ba2 100644
--- a/vm_service_client/pubspec.yaml
+++ b/vm_service_client/pubspec.yaml
@@ -1,11 +1,11 @@
 name: vm_service_client
-version: 0.2.4
+version: 0.2.4+1
 description: A client for the Dart VM service.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/vm_service_client
 
 environment:
-  sdk: '>=1.21.0 <2.0.0'
+  sdk: '>=2.0.0-dev.20.0 <2.0.0'
 
 dependencies:
   async: '>=1.7.0 <3.0.0'
diff --git a/watcher/BUILD.gn b/watcher/BUILD.gn
index 815efa0..ed45d6b 100644
--- a/watcher/BUILD.gn
+++ b/watcher/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for watcher-0.9.7+6
+# This file is generated by importer.py for watcher-0.9.7+7
 
 import("//build/dart/dart_library.gni")
 
diff --git a/watcher/CHANGELOG.md b/watcher/CHANGELOG.md
index 5e6c3d2..8f1ffc3 100644
--- a/watcher/CHANGELOG.md
+++ b/watcher/CHANGELOG.md
@@ -1,3 +1,11 @@
+# 0.9.7+7
+
+* Updates to support Dart 2.0 core library changes (wave 2.2). 
+  See [issue 31847][sdk#31847] for details.
+
+  [sdk#31847]: https://github.com/dart-lang/sdk/issues/31847
+
+
 # 0.9.7+6
 
 * Internal changes only, namely removing dep on scheduled test. 
diff --git a/watcher/lib/src/directory_watcher/linux.dart b/watcher/lib/src/directory_watcher/linux.dart
index 717e420..354ddc0 100644
--- a/watcher/lib/src/directory_watcher/linux.dart
+++ b/watcher/lib/src/directory_watcher/linux.dart
@@ -127,8 +127,7 @@
   }
 
   /// The callback that's run when a batch of changes comes in.
-  void _onBatch(Object data) {
-    var batch = data as List<FileSystemEvent>;
+  void _onBatch(List<FileSystemEvent> batch) {
     var files = new Set<String>();
     var dirs = new Set<String>();
     var changed = new Set<String>();
@@ -251,7 +250,7 @@
 
   /// Like [Stream.listen], but automatically adds the subscription to
   /// [_subscriptions] so that it can be canceled when [close] is called.
-  void _listen(Stream stream, void onData(event),
+  void _listen<T>(Stream<T> stream, void onData(T event),
       {Function onError, void onDone(), bool cancelOnError}) {
     var subscription;
     subscription = stream.listen(onData, onError: onError, onDone: () {
diff --git a/watcher/lib/src/utils.dart b/watcher/lib/src/utils.dart
index 18b53c9..0b2f799 100644
--- a/watcher/lib/src/utils.dart
+++ b/watcher/lib/src/utils.dart
@@ -78,7 +78,7 @@
 /// asynchronous firing of each event. In order to recreate the synchronous
 /// batches, this collates all the events that are received in "nearby"
 /// microtasks.
-class BatchedStreamTransformer<T> implements StreamTransformer<T, List<T>> {
+class BatchedStreamTransformer<T> extends StreamTransformerBase<T, List<T>> {
   Stream<List<T>> bind(Stream<T> input) {
     var batch = new Queue<T>();
     return new StreamTransformer<T, List<T>>.fromHandlers(
diff --git a/watcher/pubspec.yaml b/watcher/pubspec.yaml
index 62abc69..daea75b 100644
--- a/watcher/pubspec.yaml
+++ b/watcher/pubspec.yaml
@@ -1,12 +1,12 @@
 name: watcher
-version: 0.9.7+6
+version: 0.9.7+7
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/watcher
 description: >
   A file system watcher. It monitors changes to contents of directories and
   sends notifications when files have been added, removed, or modified.
 environment:
-  sdk: '>=1.21.0 <2.0.0'
+  sdk: '>=2.0.0-dev.20.0 <2.0.0'
 dependencies:
   async: '>=1.10.0 <3.0.0'
   path: '>=0.9.0 <2.0.0'
diff --git a/web_socket_channel/BUILD.gn b/web_socket_channel/BUILD.gn
index 154b855..42e3b1a 100644
--- a/web_socket_channel/BUILD.gn
+++ b/web_socket_channel/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for web_socket_channel-1.0.6
+# This file is generated by importer.py for web_socket_channel-1.0.7
 
 import("//build/dart/dart_library.gni")
 
diff --git a/web_socket_channel/CHANGELOG.md b/web_socket_channel/CHANGELOG.md
index f29baf9..d50f8d0 100644
--- a/web_socket_channel/CHANGELOG.md
+++ b/web_socket_channel/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.7
+
+* Support the latest dev SDK.
+
 ## 1.0.6
 
 * Declare support for `async` 2.0.0.
diff --git a/web_socket_channel/lib/src/copy/bytes_builder.dart b/web_socket_channel/lib/src/copy/bytes_builder.dart
index 429e6d1..1e37093 100644
--- a/web_socket_channel/lib/src/copy/bytes_builder.dart
+++ b/web_socket_channel/lib/src/copy/bytes_builder.dart
@@ -9,9 +9,8 @@
 // Because it's copied directly, there are no modifications from the original.
 //
 // This is up-to-date as of sdk revision
-// e41fb4cafd6052157dbc1490d437045240f4773f.
+// 365f7b5a8b6ef900a5ee23913b7203569b81b175.
 
-import 'dart:math';
 import 'dart:typed_data';
 
 /// Builds a list of bytes, allowing bytes and lists of bytes to be added at the
@@ -46,7 +45,7 @@
 
   /// Returns the contents of `this` and clears `this`.
   ///
-  /// The list returned is a view of the the internal buffer, limited to the
+  /// The list returned is a view of the internal buffer, limited to the
   /// [length].
   List<int> takeBytes();
 
@@ -72,24 +71,22 @@
   // Start with 1024 bytes.
   static const int _INIT_SIZE = 1024;
 
+  static final _emptyList = new Uint8List(0);
+
   int _length = 0;
   Uint8List _buffer;
 
+  _CopyingBytesBuilder([int initialCapacity = 0])
+      : _buffer = (initialCapacity <= 0)
+            ? _emptyList
+            : new Uint8List(_pow2roundup(initialCapacity));
+
   void add(List<int> bytes) {
     int bytesLength = bytes.length;
     if (bytesLength == 0) return;
     int required = _length + bytesLength;
-    if (_buffer == null) {
-      int size = _pow2roundup(required);
-      size = max(size, _INIT_SIZE);
-      _buffer = new Uint8List(size);
-    } else if (_buffer.length < required) {
-      // We will create a list in the range of 2-4 times larger than
-      // required.
-      int size = _pow2roundup(required) * 2;
-      var newBuffer = new Uint8List(size);
-      newBuffer.setRange(0, _buffer.length, _buffer);
-      _buffer = newBuffer;
+    if (_buffer.length < required) {
+      _grow(required);
     }
     assert(_buffer.length >= required);
     if (bytes is Uint8List) {
@@ -103,18 +100,39 @@
   }
 
   void addByte(int byte) {
-    add([byte]);
+    if (_buffer.length == _length) {
+      // The grow algorithm always at least doubles.
+      // If we added one to _length it would quadruple unnecessarily.
+      _grow(_length);
+    }
+    assert(_buffer.length > _length);
+    _buffer[_length] = byte;
+    _length++;
+  }
+
+  void _grow(int required) {
+    // We will create a list in the range of 2-4 times larger than
+    // required.
+    int newSize = required * 2;
+    if (newSize < _INIT_SIZE) {
+      newSize = _INIT_SIZE;
+    } else {
+      newSize = _pow2roundup(newSize);
+    }
+    var newBuffer = new Uint8List(newSize);
+    newBuffer.setRange(0, _buffer.length, _buffer);
+    _buffer = newBuffer;
   }
 
   List<int> takeBytes() {
-    if (_buffer == null) return new Uint8List(0);
+    if (_length == 0) return _emptyList;
     var buffer = new Uint8List.view(_buffer.buffer, 0, _length);
     clear();
     return buffer;
   }
 
   List<int> toBytes() {
-    if (_buffer == null) return new Uint8List(0);
+    if (_length == 0) return _emptyList;
     return new Uint8List.fromList(
         new Uint8List.view(_buffer.buffer, 0, _length));
   }
@@ -127,10 +145,11 @@
 
   void clear() {
     _length = 0;
-    _buffer = null;
+    _buffer = _emptyList;
   }
 
-  int _pow2roundup(int x) {
+  static int _pow2roundup(int x) {
+    assert(x > 0);
     --x;
     x |= x >> 1;
     x |= x >> 2;
@@ -143,24 +162,28 @@
 
 class _BytesBuilder implements BytesBuilder {
   int _length = 0;
-  final _chunks = <List<int>>[];
+  final List<Uint8List> _chunks = [];
 
   void add(List<int> bytes) {
-    if (bytes is! Uint8List) {
-      bytes = new Uint8List.fromList(bytes);
+    Uint8List typedBytes;
+    if (bytes is Uint8List) {
+      typedBytes = bytes;
+    } else {
+      typedBytes = new Uint8List.fromList(bytes);
     }
-    _chunks.add(bytes);
-    _length += bytes.length;
+    _chunks.add(typedBytes);
+    _length += typedBytes.length;
   }
 
   void addByte(int byte) {
-    add([byte]);
+    _chunks.add(new Uint8List(1)..[0] = byte);
+    _length++;
   }
 
   List<int> takeBytes() {
-    if (_chunks.length == 0) return new Uint8List(0);
+    if (_length == 0) return _CopyingBytesBuilder._emptyList;
     if (_chunks.length == 1) {
-      var buffer = _chunks.single;
+      var buffer = _chunks[0];
       clear();
       return buffer;
     }
@@ -175,7 +198,7 @@
   }
 
   List<int> toBytes() {
-    if (_chunks.length == 0) return new Uint8List(0);
+    if (_length == 0) return _CopyingBytesBuilder._emptyList;
     var buffer = new Uint8List(_length);
     int offset = 0;
     for (var chunk in _chunks) {
diff --git a/web_socket_channel/lib/src/copy/io_sink.dart b/web_socket_channel/lib/src/copy/io_sink.dart
index dafd86b..3a51ff1 100644
--- a/web_socket_channel/lib/src/copy/io_sink.dart
+++ b/web_socket_channel/lib/src/copy/io_sink.dart
@@ -9,7 +9,7 @@
 // desired public API and to remove "dart:io" dependencies have been made.
 //
 // This is up-to-date as of sdk revision
-// e41fb4cafd6052157dbc1490d437045240f4773f.
+// 365f7b5a8b6ef900a5ee23913b7203569b81b175.
 
 import 'dart:async';
 
@@ -24,12 +24,20 @@
 
   StreamSinkImpl(this._target);
 
+  // The _reportClosedSink method has been deleted for web_socket_channel. This
+  // method did nothing but print to stderr, which is unavailable here.
+
   void add(T data) {
-    if (_isClosed) return;
+    if (_isClosed) {
+      return;
+    }
     _controller.add(data);
   }
 
   void addError(error, [StackTrace stackTrace]) {
+    if (_isClosed) {
+      return;
+    }
     _controller.addError(error, stackTrace);
   }
 
@@ -37,19 +45,19 @@
     if (_isBound) {
       throw new StateError("StreamSink is already bound to a stream");
     }
-    _isBound = true;
     if (_hasError) return done;
-    // Wait for any sync operations to complete.
-    Future targetAddStream() {
-      return _target.addStream(stream).whenComplete(() {
-        _isBound = false;
-      });
-    }
 
-    if (_controllerInstance == null) return targetAddStream();
-    var future = _controllerCompleter.future;
-    _controllerInstance.close();
-    return future.then((_) => targetAddStream());
+    _isBound = true;
+    var future = _controllerCompleter == null
+        ? _target.addStream(stream)
+        : _controllerCompleter.future.then((_) => _target.addStream(stream));
+    _controllerInstance?.close();
+
+    // Wait for any pending events in [_controller] to be dispatched before
+    // adding [stream].
+    return future.whenComplete(() {
+      _isBound = false;
+    });
   }
 
   Future flush() {
diff --git a/web_socket_channel/lib/src/copy/web_socket.dart b/web_socket_channel/lib/src/copy/web_socket.dart
index c08b9ac..1928a34 100644
--- a/web_socket_channel/lib/src/copy/web_socket.dart
+++ b/web_socket_channel/lib/src/copy/web_socket.dart
@@ -9,7 +9,7 @@
 // desired public API and to remove "dart:io" dependencies have been made.
 //
 // This is up-to-date as of sdk revision
-// e41fb4cafd6052157dbc1490d437045240f4773f.
+// 365f7b5a8b6ef900a5ee23913b7203569b81b175.
 
 /// Web socket status codes used when closing a web socket connection.
 abstract class WebSocketStatus {
diff --git a/web_socket_channel/lib/src/copy/web_socket_impl.dart b/web_socket_channel/lib/src/copy/web_socket_impl.dart
index 8996619..58bcaba 100644
--- a/web_socket_channel/lib/src/copy/web_socket_impl.dart
+++ b/web_socket_channel/lib/src/copy/web_socket_impl.dart
@@ -10,7 +10,7 @@
 // desired public API and to remove "dart:io" dependencies have been made.
 //
 // This is up-to-date as of sdk revision
-// e41fb4cafd6052157dbc1490d437045240f4773f.
+// 365f7b5a8b6ef900a5ee23913b7203569b81b175.
 
 import 'dart:async';
 import 'dart:convert';
@@ -57,16 +57,21 @@
   static const int RESERVED_F = 15;
 }
 
+class _EncodedString {
+  final List<int> bytes;
+  _EncodedString(this.bytes);
+}
+
 /// The web socket protocol transformer handles the protocol byte stream
-/// which is supplied through the [:handleData:]. As the protocol is processed,
+/// which is supplied through the `handleData`. As the protocol is processed,
 /// it'll output frame data as either a List<int> or String.
 ///
 /// Important information about usage: Be sure you use cancelOnError, so the
 /// socket will be closed when the processor encounter an error. Not using it
 /// will lead to undefined behaviour.
-// TODO(ajohnsen): make this transformer reusable?
-class _WebSocketProtocolTransformer
-    implements StreamTransformer<List<int>, dynamic>, EventSink<List<int>> {
+class _WebSocketProtocolTransformer extends StreamTransformerBase<List<int>,
+        dynamic /*List<int>|_WebSocketPing|_WebSocketPong*/ >
+    implements EventSink<List<int>> {
   static const int START = 0;
   static const int LEN_FIRST = 1;
   static const int LEN_REST = 2;
@@ -93,7 +98,7 @@
   int closeCode = WebSocketStatus.NO_STATUS_RECEIVED;
   String closeReason = "";
 
-  EventSink _eventSink;
+  EventSink<dynamic /*List<int>|_WebSocketPing|_WebSocketPong*/ > _eventSink;
 
   final bool _serverSide;
   final List _maskingBytes = new List(4);
@@ -101,7 +106,8 @@
 
   _WebSocketProtocolTransformer([this._serverSide = false]);
 
-  Stream bind(Stream stream) {
+  Stream<dynamic /*List<int>|_WebSocketPing|_WebSocketPong*/ > bind(
+      Stream<List<int>> stream) {
     return new Stream.eventTransformed(stream, (EventSink eventSink) {
       if (_eventSink != null) {
         throw new StateError("WebSocket transformer already used.");
@@ -319,7 +325,7 @@
 
       switch (_currentMessageType) {
         case _WebSocketMessageType.TEXT:
-          _eventSink.add(UTF8.decode(bytes));
+          _eventSink.add(utf8.decode(bytes));
           break;
         case _WebSocketMessageType.BINARY:
           _eventSink.add(bytes);
@@ -344,7 +350,7 @@
             throw new WebSocketChannelException("Protocol error");
           }
           if (payload.length > 2) {
-            closeReason = UTF8.decode(payload.sublist(2));
+            closeReason = utf8.decode(payload.sublist(2));
           }
         }
         _state = CLOSED;
@@ -392,14 +398,15 @@
 
 // TODO(ajohnsen): Make this transformer reusable.
 class _WebSocketOutgoingTransformer
-    implements StreamTransformer<dynamic, List<int>>, EventSink {
+    extends StreamTransformerBase<dynamic, List<int>> implements EventSink {
   final WebSocketImpl webSocket;
   EventSink<List<int>> _eventSink;
 
   _WebSocketOutgoingTransformer(this.webSocket);
 
   Stream<List<int>> bind(Stream stream) {
-    return new Stream.eventTransformed(stream, (eventSink) {
+    return new Stream<List<int>>.eventTransformed(stream,
+        (EventSink<List<int>> eventSink) {
       if (_eventSink != null) {
         throw new StateError("WebSocket transformer already used");
       }
@@ -422,14 +429,15 @@
     if (message != null) {
       if (message is String) {
         opcode = _WebSocketOpcode.TEXT;
-        data = UTF8.encode(message);
+        data = utf8.encode(message);
+      } else if (message is List<int>) {
+        opcode = _WebSocketOpcode.BINARY;
+        data = message;
+      } else if (message is _EncodedString) {
+        opcode = _WebSocketOpcode.TEXT;
+        data = message.bytes;
       } else {
-        if (message is List<int>) {
-          data = message;
-          opcode = _WebSocketOpcode.BINARY;
-        } else {
-          throw new ArgumentError(message);
-        }
+        throw new ArgumentError(message);
       }
     } else {
       opcode = _WebSocketOpcode.TEXT;
@@ -450,17 +458,24 @@
       data.add((code >> 8) & 0xFF);
       data.add(code & 0xFF);
       if (reason != null) {
-        data.addAll(UTF8.encode(reason));
+        data.addAll(utf8.encode(reason));
       }
     }
     addFrame(_WebSocketOpcode.CLOSE, data);
     _eventSink.close();
   }
 
-  void addFrame(int opcode, List<int> data) =>
-      createFrame(opcode, data, webSocket._serverSide, false).forEach((e) {
-        _eventSink.add(e);
-      });
+  void addFrame(int opcode, List<int> data) {
+    createFrame(
+        opcode,
+        data,
+        webSocket._serverSide,
+        // Logic around _deflateHelper was removed here, since ther ewill never
+        // be a deflate helper for a cross-platform WebSocket client.
+        false).forEach((e) {
+      _eventSink.add(e);
+    });
+  }
 
   static Iterable<List<int>> createFrame(
       int opcode, List<int> data, bool serverSide, bool compressed) {
@@ -563,7 +578,7 @@
   StreamSubscription _subscription;
   bool _issuedPause = false;
   bool _closed = false;
-  final Completer _closeCompleter = new Completer();
+  final Completer _closeCompleter = new Completer<WebSocketImpl>();
   Completer _completer;
 
   _WebSocketConsumer(this.webSocket, this.sink);
diff --git a/web_socket_channel/pubspec.yaml b/web_socket_channel/pubspec.yaml
index 48f3bce..dd70f7e 100644
--- a/web_socket_channel/pubspec.yaml
+++ b/web_socket_channel/pubspec.yaml
@@ -1,11 +1,11 @@
 name: web_socket_channel
-version: 1.0.6
+version: 1.0.7
 description: StreamChannel wrappers for WebSockets.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/web_socket_channel
 
 environment:
-  sdk: '>=1.13.0 <2.0.0'
+  sdk: '>=2.0.0-dev.23.0 <2.0.0'
 
 dependencies:
   async: '>=1.3.0 <3.0.0'