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'
