diff --git a/analysis_options.yaml b/analysis_options.yaml
index a10d4c5..80d2368 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,2 +1,7 @@
 analyzer:
   strong-mode: true
+  errors:
+    todo: ignore
+linter:
+  rules:
+    - prefer_typing_uninitialized_variables
diff --git a/lib/src/result/error.dart b/lib/src/result/error.dart
index 45e06a2..2feb2c2 100644
--- a/lib/src/result/error.dart
+++ b/lib/src/result/error.dart
@@ -10,7 +10,7 @@
 /// A result representing a thrown error.
 class ErrorResult implements Result<Null> {
   /// The error object that was thrown.
-  final error;
+  final Object error;
 
   /// The stack trace corresponding to where [error] was thrown.
   final StackTrace stackTrace;
diff --git a/lib/src/result/result.dart b/lib/src/result/result.dart
index 98b5aa4..25503b5 100644
--- a/lib/src/result/result.dart
+++ b/lib/src/result/result.dart
@@ -98,7 +98,7 @@
   static Future<List<Result<T>>> captureAll<T>(Iterable<FutureOr<T>> elements) {
     var results = <Result<T>>[];
     int pending = 0;
-    var completer;
+    Completer<List<Result<T>>> completer;
     for (var element in elements) {
       if (element is Future<T>) {
         int i = results.length;
diff --git a/lib/src/single_subscription_transformer.dart b/lib/src/single_subscription_transformer.dart
index f590860..ff17189 100644
--- a/lib/src/single_subscription_transformer.dart
+++ b/lib/src/single_subscription_transformer.dart
@@ -17,7 +17,7 @@
   const SingleSubscriptionTransformer();
 
   Stream<T> bind(Stream<S> stream) {
-    var subscription;
+    StreamSubscription<S> subscription;
     var controller = new StreamController<T>(
         sync: true, onCancel: () => subscription.cancel());
     subscription = stream.listen((value) {
diff --git a/pubspec.yaml b/pubspec.yaml
index e1ca801..36246c2 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,17 +1,17 @@
 name: async
-version: 2.0.7
+version: 2.0.8-dev
 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.23.0 <2.0.0"
 dependencies:
-  collection: "^1.5.0"
+  collection: ^1.5.0
 dev_dependencies:
-  fake_async: ">=0.1.2 <2.0.0"
-  stack_trace: "^1.0.0"
-  test: "^0.12.0"
+  fake_async: ^1.0.0
+  stack_trace: ^1.0.0
+  test: ^1.0.0
   # For building and testing with DDC
-  build_runner: ^0.7.11
-  build_web_compilers: ^0.3.1
+  build_runner: ^0.8.0
+  build_web_compilers: ^0.4.0
   build_test: ^0.10.1
diff --git a/test/async_memoizer_test.dart b/test/async_memoizer_test.dart
index dc008f1..380f58d 100644
--- a/test/async_memoizer_test.dart
+++ b/test/async_memoizer_test.dart
@@ -6,7 +6,7 @@
 import 'package:test/test.dart';
 
 main() {
-  var cache;
+  AsyncMemoizer cache;
   setUp(() => cache = new AsyncMemoizer());
 
   test("runs the function only the first time runOnce() is called", () async {
diff --git a/test/cancelable_operation_test.dart b/test/cancelable_operation_test.dart
index bded402..8c92e2a 100644
--- a/test/cancelable_operation_test.dart
+++ b/test/cancelable_operation_test.dart
@@ -11,7 +11,7 @@
 
 void main() {
   group("without being canceled", () {
-    var completer;
+    CancelableCompleter completer;
     setUp(() {
       completer =
           new CancelableCompleter(onCancel: expectAsync0(() {}, count: 0));
@@ -118,7 +118,7 @@
 
     test("fires onCancel", () {
       var canceled = false;
-      var completer;
+      CancelableCompleter completer;
       completer = new CancelableCompleter(onCancel: expectAsync0(() {
         expect(completer.isCanceled, isTrue);
         canceled = true;
diff --git a/test/future_group_test.dart b/test/future_group_test.dart
index af04799..b6f75ba 100644
--- a/test/future_group_test.dart
+++ b/test/future_group_test.dart
@@ -10,7 +10,7 @@
 import 'utils.dart';
 
 void main() {
-  var futureGroup;
+  FutureGroup futureGroup;
   setUp(() {
     futureGroup = new FutureGroup();
   });
diff --git a/test/lazy_stream_test.dart b/test/lazy_stream_test.dart
index 8da1366..0c2e344 100644
--- a/test/lazy_stream_test.dart
+++ b/test/lazy_stream_test.dart
@@ -96,7 +96,7 @@
   });
 
   test("a lazy stream can't be listened to from within its callback", () {
-    var stream;
+    LazyStream stream;
     stream = new LazyStream(expectAsync0(() {
       expect(() => stream.listen(null), throwsStateError);
       return new Stream.empty();
diff --git a/test/result/result_future_test.dart b/test/result/result_future_test.dart
index d8b4e01..ffdbb7c 100644
--- a/test/result/result_future_test.dart
+++ b/test/result/result_future_test.dart
@@ -9,8 +9,8 @@
 import 'package:test/test.dart';
 
 void main() {
-  var completer;
-  var future;
+  Completer completer;
+  ResultFuture future;
   setUp(() {
     completer = new Completer();
     future = new ResultFuture(completer.future);
diff --git a/test/result/result_test.dart b/test/result/result_test.dart
index 23c9f63..33e146e 100644
--- a/test/result/result_test.dart
+++ b/test/result/result_test.dart
@@ -301,12 +301,17 @@
 
   test("handle neither unary nor binary", () {
     ErrorResult result = new Result.error("error", stack);
-    expect(() => result.handle(() => fail("unreachable")), throws);
-    expect(() => result.handle((a, b, c) => fail("unreachable")), throws);
-    expect(() => result.handle((a, b, {c}) => fail("unreachable")), throws);
-    expect(() => result.handle((a, {b}) => fail("unreachable")), throws);
-    expect(() => result.handle(({a, b}) => fail("unreachable")), throws);
-    expect(() => result.handle(({a}) => fail("unreachable")), throws);
+    expect(() => result.handle(() => fail("unreachable")), throwsA(anything));
+    expect(() => result.handle((a, b, c) => fail("unreachable")),
+        throwsA(anything));
+    expect(() => result.handle((a, b, {c}) => fail("unreachable")),
+        throwsA(anything));
+    expect(() => result.handle((a, {b}) => fail("unreachable")),
+        throwsA(anything));
+    expect(() => result.handle(({a, b}) => fail("unreachable")),
+        throwsA(anything));
+    expect(
+        () => result.handle(({a}) => fail("unreachable")), throwsA(anything));
   });
 }
 
diff --git a/test/stream_completer_test.dart b/test/stream_completer_test.dart
index 4f30a7a..55b4ce3 100644
--- a/test/stream_completer_test.dart
+++ b/test/stream_completer_test.dart
@@ -77,7 +77,7 @@
     var completer = new StreamCompleter();
     var lastEvent = -1;
     var controller = new StreamController();
-    var subscription;
+    StreamSubscription subscription;
     subscription = completer.stream.listen((value) {
       expect(value, lessThan(3));
       lastEvent = value;
diff --git a/test/stream_group_test.dart b/test/stream_group_test.dart
index d94f4d0..83b685c 100644
--- a/test/stream_group_test.dart
+++ b/test/stream_group_test.dart
@@ -9,7 +9,7 @@
 
 main() {
   group("single-subscription", () {
-    var streamGroup;
+    StreamGroup<String> streamGroup;
     setUp(() {
       streamGroup = new StreamGroup<String>();
     });
@@ -250,7 +250,7 @@
   });
 
   group("broadcast", () {
-    var streamGroup;
+    StreamGroup<String> streamGroup;
     setUp(() {
       streamGroup = new StreamGroup<String>.broadcast();
     });
@@ -439,7 +439,7 @@
 }
 
 void regardlessOfType(StreamGroup<String> newStreamGroup()) {
-  var streamGroup;
+  StreamGroup<String> streamGroup;
   setUp(() {
     streamGroup = newStreamGroup();
   });
diff --git a/test/stream_queue_test.dart b/test/stream_queue_test.dart
index 8bd9d23..7a3d718 100644
--- a/test/stream_queue_test.dart
+++ b/test/stream_queue_test.dart
@@ -406,7 +406,7 @@
       expect(controller.hasListener, isTrue);
       expect(controller.isPaused, isFalse);
 
-      var lastEvent;
+      dynamic lastEvent;
       subscription.onData((value) => lastEvent = value);
 
       controller.add(2);
@@ -445,7 +445,7 @@
       expect(await events.peek, 4);
       expect(await events.next, 4);
       // Throws at end.
-      expect(events.peek, throws);
+      expect(events.peek, throwsA(anything));
       await events.cancel();
     });
     test("multiple requests at the same time", () async {
@@ -610,7 +610,7 @@
       var controller = new StreamController<int>();
       var events = new StreamQueue<int>(controller.stream);
 
-      var hasNext;
+      bool hasNext;
       events.hasNext.then((result) {
         hasNext = result;
       });
@@ -626,7 +626,7 @@
       var controller = new StreamController<int>();
       var events = new StreamQueue<int>(controller.stream);
 
-      var hasNext;
+      bool hasNext;
       events.hasNext.then((result) {
         hasNext = result;
       });
diff --git a/test/stream_sink_completer_test.dart b/test/stream_sink_completer_test.dart
index 3c8b576..a149a7f 100644
--- a/test/stream_sink_completer_test.dart
+++ b/test/stream_sink_completer_test.dart
@@ -10,7 +10,7 @@
 import "utils.dart";
 
 main() {
-  var completer;
+  StreamSinkCompleter completer;
   setUp(() {
     completer = new StreamSinkCompleter();
   });
diff --git a/test/stream_sink_transformer_test.dart b/test/stream_sink_transformer_test.dart
index 208a03a..552bdaa 100644
--- a/test/stream_sink_transformer_test.dart
+++ b/test/stream_sink_transformer_test.dart
@@ -10,7 +10,7 @@
 import "utils.dart";
 
 void main() {
-  var controller;
+  StreamController controller;
   setUp(() {
     controller = new StreamController();
   });
diff --git a/test/stream_splitter_test.dart b/test/stream_splitter_test.dart
index 70266ee..c118b12 100644
--- a/test/stream_splitter_test.dart
+++ b/test/stream_splitter_test.dart
@@ -9,7 +9,7 @@
 
 main() {
   StreamController<int> controller;
-  var splitter;
+  StreamSplitter splitter;
   setUp(() {
     controller = new StreamController<int>();
     splitter = new StreamSplitter<int>(controller.stream);
diff --git a/test/stream_zip_test.dart b/test/stream_zip_test.dart
index 71d8eee..018c8ab 100644
--- a/test/stream_zip_test.dart
+++ b/test/stream_zip_test.dart
@@ -307,7 +307,7 @@
     var s2 = new Stream.fromIterable([1, 3, 5, 7]);
     var sz = new StreamZip([s1, s2]);
     int ctr = 0;
-    var sub;
+    StreamSubscription sub;
     sub = sz.listen(expectAsync1((v) {
       expect(v, equals([ctr * 2, ctr * 2 + 1]));
       if (ctr == 1) {
diff --git a/test/subscription_stream_test.dart b/test/subscription_stream_test.dart
index 6e2c9d5..804e92f 100644
--- a/test/subscription_stream_test.dart
+++ b/test/subscription_stream_test.dart
@@ -40,7 +40,7 @@
     var sourceSubscription = stream.listen(null);
     var subscriptionStream = new SubscriptionStream<int>(sourceSubscription);
     var subscription = subscriptionStream.listen(null);
-    expect(() => subscriptionStream.listen(null), throws);
+    expect(() => subscriptionStream.listen(null), throwsA(anything));
     await subscription.cancel();
   });
 
@@ -49,7 +49,7 @@
     var sourceSubscription = controller.stream.listen(null);
     var subscriptionStream = new SubscriptionStream(sourceSubscription);
     expect(controller.isPaused, isTrue);
-    var lastEvent;
+    dynamic lastEvent;
     var subscription = subscriptionStream.listen((value) {
       lastEvent = value;
     });
@@ -72,8 +72,8 @@
   group("cancelOnError source:", () {
     for (var sourceCancels in [false, true]) {
       group("${sourceCancels ? "yes" : "no"}:", () {
-        var subscriptionStream;
-        var onCancel; // Completes if source stream is canceled before done.
+        SubscriptionStream subscriptionStream;
+        Future onCancel; // Completes if source stream is canceled before done.
         setUp(() {
           var cancelCompleter = new Completer();
           var source = createErrorStream(cancelCompleter);
@@ -142,7 +142,7 @@
 
           var subscription =
               subscriptionStream.listen(null, cancelOnError: cancelOnError);
-          expect(subscription.asFuture(), throws);
+          expect(subscription.asFuture(), throwsA(anything));
         });
       });
     }
diff --git a/test/typed_wrapper/future_test.dart b/test/typed_wrapper/future_test.dart
index 7fb91c8..ea3303f 100644
--- a/test/typed_wrapper/future_test.dart
+++ b/test/typed_wrapper/future_test.dart
@@ -11,7 +11,7 @@
 
 void main() {
   group("with valid types, forwards", () {
-    var wrapper;
+    TypeSafeFuture<int> wrapper;
     TypeSafeFuture<int> errorWrapper;
     setUp(() {
       wrapper = new TypeSafeFuture<int>(new Future<Object>.value(12));
@@ -62,7 +62,7 @@
       expect(
           new TypeSafeFuture<int>(new Completer<Object>().future)
               .timeout(Duration.zero),
-          throwsA(new isInstanceOf<TimeoutException>()));
+          throwsA(new TypeMatcher<TimeoutException>()));
 
       expect(
           new TypeSafeFuture<int>(new Completer<Object>().future)
diff --git a/test/typed_wrapper/stream_subscription_test.dart b/test/typed_wrapper/stream_subscription_test.dart
index f52abe7..50c07b6 100644
--- a/test/typed_wrapper/stream_subscription_test.dart
+++ b/test/typed_wrapper/stream_subscription_test.dart
@@ -11,9 +11,9 @@
 
 void main() {
   group("with valid types, forwards", () {
-    var controller;
-    var wrapper;
-    var isCanceled;
+    StreamController controller;
+    StreamSubscription wrapper;
+    bool isCanceled;
     setUp(() {
       controller = new StreamController<Object>(onCancel: () {
         isCanceled = true;
@@ -68,9 +68,9 @@
   });
 
   group("with invalid types,", () {
-    var controller;
-    var wrapper;
-    var isCanceled;
+    StreamController controller;
+    StreamSubscription wrapper;
+    bool isCanceled;
     setUp(() {
       controller = new StreamController<Object>(onCancel: () {
         isCanceled = true;
diff --git a/test/utils.dart b/test/utils.dart
index 39df0f6..3f8c0ef 100644
--- a/test/utils.dart
+++ b/test/utils.dart
@@ -38,10 +38,10 @@
 
 /// A matcher that runs a callback in its own zone and asserts that that zone
 /// emits a [CastError].
-final throwsZonedCastError = throwsZoned(new isInstanceOf<CastError>());
+final throwsZonedCastError = throwsZoned(new TypeMatcher<CastError>());
 
 /// A matcher that matches a callback or future that throws a [CastError].
-final throwsCastError = throwsA(new isInstanceOf<CastError>());
+final throwsCastError = throwsA(new TypeMatcher<CastError>());
 
 /// A badly behaved stream which throws if it's ever listened to.
 ///
