Enforce two strict analysis modes (#649)

diff --git a/analysis_options.yaml b/analysis_options.yaml
index 1a9208e..e539e7c 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -2,6 +2,8 @@
 # include: package:pedantic/analysis_options.1.9.0.yaml
 
 analyzer:
+  language:
+    strict-raw-types: true
   strong-mode:
     implicit-casts: false
   exclude:
diff --git a/benchmark/bench.dart b/benchmark/bench.dart
index b1e039d..936dca9 100644
--- a/benchmark/bench.dart
+++ b/benchmark/bench.dart
@@ -6,10 +6,12 @@
 
 import 'dart:async';
 
+import 'package:analysis_server_lib/analysis_server_lib.dart';
 import 'package:dart_services/src/analysis_server.dart';
 import 'package:dart_services/src/bench.dart';
 import 'package:dart_services/src/common.dart';
 import 'package:dart_services/src/compiler.dart';
+import 'package:dart_services/src/protos/dart_services.pb.dart' as proto;
 import 'package:dart_services/src/sdk_manager.dart';
 import 'package:logging/logging.dart';
 
@@ -61,13 +63,13 @@
   }
 
   @override
-  Future init() => analysisServer.init();
+  Future<AnalysisServer> init() => analysisServer.init();
 
   @override
-  Future perform() => analysisServer.analyze(source);
+  Future<proto.AnalysisResults> perform() => analysisServer.analyze(source);
 
   @override
-  Future tearDown() => analysisServer.shutdown();
+  Future<dynamic> tearDown() => analysisServer.shutdown();
 }
 
 class Dart2jsBenchmark extends Benchmark {
@@ -78,7 +80,7 @@
       : super('dart2js.$name');
 
   @override
-  Future perform() {
+  Future<void> perform() {
     return compiler.compile(source).then((CompilationResults result) {
       if (!result.success) throw result;
     });
@@ -93,7 +95,7 @@
       : super('dartdevc.$name');
 
   @override
-  Future perform() {
+  Future<void> perform() {
     return compiler.compileDDC(source).then((DDCCompilationResults result) {
       if (!result.success) throw result;
     });
@@ -109,13 +111,14 @@
         super('completion.$name');
 
   @override
-  Future init() => analysisServer.init();
+  Future<AnalysisServer> init() => analysisServer.init();
 
   @override
-  Future perform() => analysisServer.complete(source, 30);
+  Future<proto.CompleteResponse> perform() =>
+      analysisServer.complete(source, 30);
 
   @override
-  Future tearDown() => analysisServer.shutdown();
+  Future<dynamic> tearDown() => analysisServer.shutdown();
 }
 
 final String _sunflower = '''
diff --git a/lib/services_gae.dart b/lib/services_gae.dart
index 6e90b03..577efe0 100644
--- a/lib/services_gae.dart
+++ b/lib/services_gae.dart
@@ -126,7 +126,7 @@
     await request.response.close();
   }
 
-  Future _processReadinessRequest(io.HttpRequest request) async {
+  Future<void> _processReadinessRequest(io.HttpRequest request) async {
     _logger.info('Processing readiness check');
     if (proxying) {
       request.response.statusCode = io.HttpStatus.ok;
@@ -141,7 +141,7 @@
     await request.response.close();
   }
 
-  Future _processLivenessRequest(io.HttpRequest request) async {
+  Future<void> _processLivenessRequest(io.HttpRequest request) async {
     _logger.info('Processing liveness check');
     if (proxying) {
       request.response.statusCode = io.HttpStatus.ok;
@@ -179,7 +179,7 @@
     await request.response.close();
   }
 
-  Future _processDefaultRequest(io.HttpRequest request) async {
+  Future<void> _processDefaultRequest(io.HttpRequest request) async {
     request.response.statusCode = io.HttpStatus.notFound;
     await request.response.close();
   }
diff --git a/lib/src/analysis_server.dart b/lib/src/analysis_server.dart
index 1937e05..1c20ed5 100644
--- a/lib/src/analysis_server.dart
+++ b/lib/src/analysis_server.dart
@@ -56,7 +56,7 @@
   }
 
   @override
-  Future shutdown() {
+  Future<dynamic> shutdown() {
     _logger.info('DartAnalysisServerWrapper shutdown');
     return _tempProject
         .delete(recursive: true)
@@ -86,7 +86,7 @@
   }
 
   @override
-  Future shutdown() {
+  Future<dynamic> shutdown() {
     _logger.info('FlutterAnalysisServerWrapper shutdown');
     return super.shutdown();
   }
@@ -149,8 +149,9 @@
         await _sendRemoveOverlays();
 
         return analysisServer;
-      }).catchError((err, st) {
+      }).catchError((Object err, StackTrace st) {
         _logger.severe('Error starting analysis server ($sdkPath): $err.\n$st');
+        return null;
       });
     }
 
diff --git a/lib/src/common_server_impl.dart b/lib/src/common_server_impl.dart
index a578da6..ec53a84 100644
--- a/lib/src/common_server_impl.dart
+++ b/lib/src/common_server_impl.dart
@@ -137,7 +137,7 @@
   bool get isRestarting => false;
 
   @override
-  Future shutdown() => null;
+  Future<dynamic> shutdown() => null;
 
   @override
   AnalysisServersWrapper get _analysisServers => null;
diff --git a/lib/src/server_cache.dart b/lib/src/server_cache.dart
index e7785d9..79059eb 100644
--- a/lib/src/server_cache.dart
+++ b/lib/src/server_cache.dart
@@ -122,7 +122,7 @@
           });
         })
         .timeout(const Duration(milliseconds: _connectionRetryMaxMs))
-        .catchError((_) {
+        .catchError((Object _) {
           log.severe(
               '$_logPrefix: Unable to connect to redis server, reconnecting in ${nextRetryMs}ms ...');
           Future<void>.delayed(Duration(milliseconds: nextRetryMs)).then((_) {
diff --git a/test/bench_test.dart b/test/bench_test.dart
index f875c10..e8711ec 100644
--- a/test/bench_test.dart
+++ b/test/bench_test.dart
@@ -44,7 +44,7 @@
   MockBenchmark() : super('mock');
 
   @override
-  Future perform() {
+  Future<void> perform() {
     count++;
     return Future.delayed(Duration(milliseconds: 10));
   }
diff --git a/test/common_server_api_protobuf_test.dart b/test/common_server_api_protobuf_test.dart
index d1456c6..52c86e1 100644
--- a/test/common_server_api_protobuf_test.dart
+++ b/test/common_server_api_protobuf_test.dart
@@ -100,7 +100,7 @@
       // TODO(jcollins-g): determine which piece of initialization isn't
       // happening and deal with that in warmup/init.
       {
-        var decodedJson = {};
+        var decodedJson = <dynamic, dynamic>{};
         final jsonData = proto.SourceRequest()..source = sampleCodeError;
         while (decodedJson.isEmpty) {
           final response =
@@ -409,10 +409,11 @@
   Future<String> get(String key) => Future.value(null);
 
   @override
-  Future set(String key, String value, {Duration expiration}) => Future.value();
+  Future<void> set(String key, String value, {Duration expiration}) =>
+      Future.value();
 
   @override
-  Future remove(String key) => Future.value();
+  Future<void> remove(String key) => Future.value();
 
   @override
   Future<void> shutdown() => Future.value();
diff --git a/test/common_server_api_test.dart b/test/common_server_api_test.dart
index 6fffa9f..50a935e 100644
--- a/test/common_server_api_test.dart
+++ b/test/common_server_api_test.dart
@@ -285,7 +285,7 @@
       // TODO(jcollins-g): determine which piece of initialization isn't
       // happening and deal with that in warmup/init.
       {
-        var decodedJson = {};
+        var decodedJson = <dynamic, dynamic>{};
         final jsonData = {'source': sampleCodeError};
         while (decodedJson.isEmpty) {
           final response =
@@ -318,7 +318,7 @@
             await _sendPostRequest('dartservices/$version/analyze', jsonData);
         expect(response.statusCode, 200);
         final data = await response.transform(utf8.decoder).join();
-        expect(json.decode(data), {});
+        expect(json.decode(data), <dynamic, dynamic>{});
       }
     });
 
@@ -389,7 +389,7 @@
 
     test('analyze negative-test noSource', () async {
       for (final version in versions) {
-        final jsonData = {};
+        final jsonData = <dynamic, dynamic>{};
         final response =
             await _sendPostRequest('dartservices/$version/analyze', jsonData);
         expect(response.statusCode, 400);
@@ -421,7 +421,7 @@
 
     test('compile negative-test noSource', () async {
       for (final version in versions) {
-        final jsonData = {};
+        final jsonData = <dynamic, dynamic>{};
         final response =
             await _sendPostRequest('dartservices/$version/compile', jsonData);
         expect(response.statusCode, 400);
@@ -452,8 +452,8 @@
 
     test('complete no data', () async {
       for (final version in versions) {
-        final response =
-            await _sendPostRequest('dartservices/$version/complete', {});
+        final response = await _sendPostRequest(
+            'dartservices/$version/complete', <dynamic, dynamic>{});
         expect(response.statusCode, 400);
       }
     });
@@ -500,7 +500,7 @@
         expect(response.statusCode, 200);
         final data = json.decode(await response.transform(utf8.decoder).join());
         expect(data, {
-          'info': {},
+          'info': <dynamic, dynamic>{},
         });
       }
     });
@@ -515,7 +515,7 @@
             await _sendPostRequest('dartservices/$version/document', jsonData);
         expect(response.statusCode, 200);
         final data = json.decode(await response.transform(utf8.decoder).join());
-        expect(data, {'info': {}});
+        expect(data, {'info': <dynamic, dynamic>{}});
       }
     });
 
@@ -662,10 +662,11 @@
   Future<String> get(String key) => Future.value(null);
 
   @override
-  Future set(String key, String value, {Duration expiration}) => Future.value();
+  Future<void> set(String key, String value, {Duration expiration}) =>
+      Future.value();
 
   @override
-  Future remove(String key) => Future.value();
+  Future<void> remove(String key) => Future.value();
 
   @override
   Future<void> shutdown() => Future.value();
diff --git a/test/flutter_analysis_server_test.dart b/test/flutter_analysis_server_test.dart
index 08788d1..8783322 100644
--- a/test/flutter_analysis_server_test.dart
+++ b/test/flutter_analysis_server_test.dart
@@ -298,10 +298,11 @@
   Future<String> get(String key) => Future.value(null);
 
   @override
-  Future set(String key, String value, {Duration expiration}) => Future.value();
+  Future<void> set(String key, String value, {Duration expiration}) =>
+      Future.value();
 
   @override
-  Future remove(String key) => Future.value();
+  Future<void> remove(String key) => Future.value();
 
   @override
   Future<void> shutdown() => Future.value();
diff --git a/test/redis_cache_test.dart b/test/redis_cache_test.dart
index a597c98..232c1d7 100644
--- a/test/redis_cache_test.dart
+++ b/test/redis_cache_test.dart
@@ -91,7 +91,7 @@
         logMessages = [];
         await redisCache.set('expiringkey', 'expiringValue',
             expiration: Duration(milliseconds: 1));
-        await Future.delayed(Duration(milliseconds: 100));
+        await Future<void>.delayed(Duration(milliseconds: 100));
         await expectLater(await redisCache.get('expiringkey'), isNull);
         expect(logMessages, isEmpty);
       });
@@ -146,7 +146,7 @@
         try {
           // Wait for a retry message.
           while (logMessages.length < 2) {
-            await (Future.delayed(Duration(milliseconds: 50)));
+            await (Future<void>.delayed(Duration(milliseconds: 50)));
           }
           expect(
               logMessages.join('\n'),
diff --git a/tool/fuzz_driver.dart b/tool/fuzz_driver.dart
index 3d19fa0..2b1b847 100644
--- a/tool/fuzz_driver.dart
+++ b/tool/fuzz_driver.dart
@@ -42,7 +42,7 @@
 OperationType lastExecuted;
 int lastOffset;
 
-Future main(List<String> args) async {
+Future<void> main(List<String> args) async {
   if (args.isEmpty) {
     print('''
 Usage: slow_test path_to_test_collection
@@ -115,7 +115,7 @@
 }
 
 /// Init the tools, and warm them up
-Future setupTools(String sdkPath) async {
+Future<void> setupTools(String sdkPath) async {
   print('Executing setupTools');
   await analysisServer?.shutdown();
 
@@ -138,7 +138,9 @@
   print('SetupTools done');
 }
 
-Future testPath(String path, analysis_server.AnalysisServerWrapper wrapper,
+Future<void> testPath(
+    String path,
+    analysis_server.AnalysisServerWrapper wrapper,
     comp.Compiler compiler) async {
   final f = io.File(path);
   var src = f.readAsStringSync();
@@ -393,10 +395,11 @@
   Future<String> get(String key) => Future.value(null);
 
   @override
-  Future set(String key, String value, {Duration expiration}) => Future.value();
+  Future<void> set(String key, String value, {Duration expiration}) =>
+      Future.value();
 
   @override
-  Future remove(String key) => Future.value();
+  Future<void> remove(String key) => Future.value();
 
   @override
   Future<void> shutdown() => Future.value();
diff --git a/tool/grind.dart b/tool/grind.dart
index 1215584..7b802af 100644
--- a/tool/grind.dart
+++ b/tool/grind.dart
@@ -32,7 +32,7 @@
 
 @Task()
 @Depends(buildStorageArtifacts)
-Future test() => TestRunner().testAsync();
+Future<dynamic> test() => TestRunner().testAsync();
 
 @DefaultTask()
 @Depends(analyze, test)
@@ -91,7 +91,7 @@
   }
 }
 
-Future _validateExists(String url) async {
+Future<void> _validateExists(String url) async {
   log('checking $url...');
 
   final response = await http.head(url);
@@ -161,7 +161,7 @@
   }
 }
 
-Future _buildStorageArtifacts(Directory dir) async {
+Future<void> _buildStorageArtifacts(Directory dir) async {
   final pubspec = createPubspec(includeFlutterWeb: true);
   joinFile(dir, ['pubspec.yaml']).writeAsStringSync(pubspec);