[analyzer] Migrate more LSP tests to null-safety

Change-Id: Iaeb2152d47df05434ab470901900da56cae7e792
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196125
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/lsp/flutter_outline_test.dart b/pkg/analysis_server/test/lsp/flutter_outline_test.dart
index 60bb110..2059de5 100644
--- a/pkg/analysis_server/test/lsp/flutter_outline_test.dart
+++ b/pkg/analysis_server/test/lsp/flutter_outline_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -48,13 +46,13 @@
 
     expect(outlineBeforeChange, isNotNull);
     expect(outlineBeforeChange.children, hasLength(1));
-    expect(outlineBeforeChange.children[0].children[0].className,
+    expect(outlineBeforeChange.children![0].children![0].className,
         equals('Container'));
 
     expect(outlineAfterChange, isNotNull);
     expect(outlineAfterChange.children, hasLength(1));
     expect(
-        outlineAfterChange.children[0].children[0].className, equals('Icon'));
+        outlineAfterChange.children![0].children![0].className, equals('Icon'));
   }
 
   Future<void> test_initial() async {
@@ -91,7 +89,7 @@
             end: Position(line: 15, character: 0))));
     expect(outline.children, hasLength(1));
 
-    final build = outline.children[0];
+    final build = outline.children![0];
     expect(build.kind, equals('DART_ELEMENT'));
     expect(
         build.range,
@@ -103,19 +101,20 @@
         equals(Range(
             start: Position(line: 3, character: 0),
             end: Position(line: 14, character: 6))));
-    expect(build.dartElement.kind, equals('FUNCTION'));
-    expect(build.dartElement.name, equals('build'));
-    expect(build.dartElement.parameters, equals('(BuildContext context)'));
+    final dartElement = build.dartElement!;
+    expect(dartElement.kind, equals('FUNCTION'));
+    expect(dartElement.name, equals('build'));
+    expect(dartElement.parameters, equals('(BuildContext context)'));
     expect(
-        build.dartElement.range,
+        dartElement.range,
         equals(Range(
             start: Position(line: 3, character: 7),
             end: Position(line: 3, character: 12))));
-    expect(build.dartElement.returnType, equals('Widget'));
+    expect(dartElement.returnType, equals('Widget'));
     expect(build.children, hasLength(1));
 
     final icon =
-        build.children[0].children[0].children[0].children[0].children[0];
+        build.children![0].children![0].children![0].children![0].children![0];
     expect(icon.kind, equals('NEW_INSTANCE'));
     expect(icon.className, 'Icon');
     expect(
@@ -125,10 +124,11 @@
             end: Position(line: 8, character: 50))));
     expect(icon.codeRange, equals(icon.range));
     expect(icon.attributes, hasLength(1));
-    expect(icon.attributes[0].name, equals('icon'));
-    expect(icon.attributes[0].label, equals('Icons.ac_unit'));
+    final attributes = icon.attributes!;
+    expect(attributes[0].name, equals('icon'));
+    expect(attributes[0].label, equals('Icons.ac_unit'));
     expect(
-        icon.attributes[0].valueRange,
+        attributes[0].valueRange,
         equals(Range(
             start: Position(line: 8, character: 36),
             end: Position(line: 8, character: 49))));
diff --git a/pkg/analysis_server/test/lsp/folding_test.dart b/pkg/analysis_server/test/lsp/folding_test.dart
index bea190d..51b2eef 100644
--- a/pkg/analysis_server/test/lsp/folding_test.dart
+++ b/pkg/analysis_server/test/lsp/folding_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
@@ -271,7 +269,7 @@
     expect(regions, containsAll(expectedRegions));
   }
 
-  FoldingRange _toFoldingRange(Range range, FoldingRangeKind kind) {
+  FoldingRange _toFoldingRange(Range range, FoldingRangeKind? kind) {
     return FoldingRange(
       startLine: range.start.line,
       startCharacter: range.start.character,
diff --git a/pkg/analysis_server/test/lsp/format_test.dart b/pkg/analysis_server/test/lsp/format_test.dart
index ad5bb9c..f00bc9b 100644
--- a/pkg/analysis_server/test/lsp/format_test.dart
+++ b/pkg/analysis_server/test/lsp/format_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:test/test.dart';
@@ -22,7 +20,7 @@
 class FormatTest extends AbstractLspAnalysisServerTest {
   Future<List<TextEdit>> expectFormattedContents(
       Uri uri, String original, String expected) async {
-    final formatEdits = await formatDocument(uri.toString());
+    final formatEdits = (await formatDocument(uri.toString()))!;
     final formattedContents = applyTextEdits(original, formatEdits);
     expect(formattedContents, equals(expected));
     return formatEdits;
@@ -31,7 +29,7 @@
   Future<List<TextEdit>> expectRangeFormattedContents(
       Uri uri, String original, String expected) async {
     final formatEdits =
-        await formatRange(uri.toString(), rangeFromMarkers(original));
+        (await formatRange(uri.toString(), rangeFromMarkers(original)))!;
     final formattedContents =
         applyTextEdits(withoutMarkers(original), formatEdits);
     expect(formattedContents, equals(expected));
@@ -96,7 +94,7 @@
       {},
     );
 
-    Registration registration(Method method) =>
+    Registration? registration(Method method) =>
         registrationFor(registrations, method);
 
     // By default, the formatters should have been registered.
@@ -139,7 +137,7 @@
       {},
     );
 
-    Registration registration(Method method) =>
+    Registration? registration(Method method) =>
         registrationFor(registrations, method);
 
     // By default, the formatters should have been registered.
@@ -181,9 +179,8 @@
     await initialize();
     await openFile(mainFileUri, withoutMarkers(contents));
 
-    final formatEdits = await formatOnType(
-        mainFileUri.toString(), positionFromMarker(contents), '}');
-    expect(formatEdits, isNotNull);
+    final formatEdits = (await formatOnType(
+        mainFileUri.toString(), positionFromMarker(contents), '}'))!;
     final formattedContents =
         applyTextEdits(withoutMarkers(contents), formatEdits);
     expect(formattedContents, equals(expected));
diff --git a/pkg/analysis_server/test/lsp/hover_test.dart b/pkg/analysis_server/test/lsp/hover_test.dart
index 0be55c5..77bb9b5 100644
--- a/pkg/analysis_server/test/lsp/hover_test.dart
+++ b/pkg/analysis_server/test/lsp/hover_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:test/test.dart';
@@ -37,7 +35,7 @@
     await initialAnalysis;
     var hover = await getHover(mainFileUri, positionFromMarker(content));
     expect(hover, isNotNull);
-    expect(hover.range, equals(rangeFromMarkers(content)));
+    expect(hover!.range, equals(rangeFromMarkers(content)));
     expect(_getStringContents(hover), endsWith('This is shared content.'));
   }
 
@@ -89,7 +87,7 @@
     await openFile(mainFileUri, withoutMarkers(content));
     final hover = await getHover(mainFileUri, positionFromMarker(content));
     expect(hover, isNotNull);
-    expect(hover.range, equals(rangeFromMarkers(content)));
+    expect(hover!.range, equals(rangeFromMarkers(content)));
     expect(hover.contents, isNotNull);
     final markup = _getMarkupContents(hover);
     expect(markup.kind, equals(MarkupKind.Markdown));
@@ -108,7 +106,7 @@
     await openFile(mainFileUri, withoutMarkers(content));
     final hover = await getHover(mainFileUri, positionFromMarker(content));
     expect(hover, isNotNull);
-    expect(hover.range, equals(rangeFromMarkers(content)));
+    expect(hover!.range, equals(rangeFromMarkers(content)));
     expect(hover.contents, isNotNull);
     final markup = _getMarkupContents(hover);
     expect(markup.kind, equals(MarkupKind.Markdown));
@@ -151,7 +149,7 @@
     await openFile(mainFileUri, withoutMarkers(content));
     final hover = await getHover(mainFileUri, positionFromMarker(content));
     expect(hover, isNotNull);
-    expect(hover.range, equals(rangeFromMarkers(content)));
+    expect(hover!.range, equals(rangeFromMarkers(content)));
     expect(hover.contents, isNotNull);
     // Ensure we got PlainText back as the type, even though we're sending the
     // same markdown content.
@@ -172,7 +170,7 @@
     await openFile(mainFileUri, withoutMarkers(content));
     final hover = await getHover(mainFileUri, positionFromMarker(content));
     expect(hover, isNotNull);
-    expect(hover.range, equals(rangeFromMarkers(content)));
+    expect(hover!.range, equals(rangeFromMarkers(content)));
   }
 
   Future<void> test_string_noDocComment() async {
@@ -192,7 +190,7 @@
     await openFile(mainFileUri, withoutMarkers(content));
     final hover = await getHover(mainFileUri, positionFromMarker(content));
     expect(hover, isNotNull);
-    expect(hover.range, equals(rangeFromMarkers(content)));
+    expect(hover!.range, equals(rangeFromMarkers(content)));
     expect(hover.contents, isNotNull);
     expect(_getStringContents(hover), equals(expectedHoverContent));
   }
@@ -210,12 +208,14 @@
     await initialize();
     await openFile(mainFileUri, withoutMarkers(original));
     var hover = await getHover(mainFileUri, positionFromMarker(original));
-    var contents = _getStringContents(hover);
+    expect(hover, isNotNull);
+    var contents = _getStringContents(hover!);
     expect(contents, contains('Original'));
 
     await replaceFile(222, mainFileUri, withoutMarkers(updated));
     hover = await getHover(mainFileUri, positionFromMarker(updated));
-    contents = _getStringContents(hover);
+    expect(hover, isNotNull);
+    contents = _getStringContents(hover!);
     expect(contents, contains('Updated'));
   }
 
@@ -229,7 +229,7 @@
     await openFile(mainFileUri, withoutMarkers(content));
     final hover = await getHover(mainFileUri, positionFromMarker(content));
     expect(hover, isNotNull);
-    expect(hover.range, equals(rangeFromMarkers(content)));
+    expect(hover!.range, equals(rangeFromMarkers(content)));
     expect(hover.contents, isNotNull);
     final contents = _getStringContents(hover);
     expect(contents, contains('This is a string.'));
@@ -245,7 +245,7 @@
     await initialize();
     final hover = await getHover(mainFileUri, positionFromMarker(content));
     expect(hover, isNotNull);
-    expect(hover.range, equals(rangeFromMarkers(content)));
+    expect(hover!.range, equals(rangeFromMarkers(content)));
     expect(hover.contents, isNotNull);
     final markup = _getStringContents(hover);
     expect(markup, contains('This is a string.'));
diff --git a/pkg/analysis_server/test/lsp/implementation_test.dart b/pkg/analysis_server/test/lsp/implementation_test.dart
index 63cc7f8..195b46b 100644
--- a/pkg/analysis_server/test/lsp/implementation_test.dart
+++ b/pkg/analysis_server/test/lsp/implementation_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/lsp/initialization_test.dart b/pkg/analysis_server/test/lsp/initialization_test.dart
index 93ecc62..fb9fcdf 100644
--- a/pkg/analysis_server/test/lsp/initialization_test.dart
+++ b/pkg/analysis_server/test/lsp/initialization_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/lsp_protocol/protocol_special.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
@@ -54,7 +52,7 @@
     final dartOptions = CompletionRegistrationOptions.fromJson(
         dartRegistration.registerOptions);
     expect(dartOptions.documentSelector, hasLength(1));
-    expect(dartOptions.documentSelector[0].language, dartLanguageId);
+    expect(dartOptions.documentSelector![0].language, dartLanguageId);
     expect(dartOptions.triggerCharacters, isNotEmpty);
 
     // Check non-Dart registration.
@@ -63,7 +61,7 @@
         r != dartRegistration);
     final nonDartOptions = CompletionRegistrationOptions.fromJson(
         nonDartRegistration.registerOptions);
-    final otherLanguages = nonDartOptions.documentSelector
+    final otherLanguages = nonDartOptions.documentSelector!
         .map((selector) => selector.language)
         .toList();
     expect(otherLanguages, isNot(contains('dart')));
@@ -91,8 +89,8 @@
     // static registrations for them.
     // https://github.com/dart-lang/sdk/issues/38490
     final initResult = InitializeResult.fromJson(initResponse.result);
-    expect(initResult.serverInfo.name, 'Dart SDK LSP Analysis Server');
-    expect(initResult.serverInfo.version, isNotNull);
+    expect(initResult.serverInfo!.name, 'Dart SDK LSP Analysis Server');
+    expect(initResult.serverInfo!.version, isNotNull);
     expect(initResult.capabilities, isNotNull);
     expect(initResult.capabilities.textDocumentSync, isNull);
 
@@ -113,16 +111,17 @@
     // The hover capability should only specific Dart.
     expect(hover, isNotNull);
     expect(hover.documentSelector, hasLength(1));
-    expect(hover.documentSelector.single.language, equals('dart'));
+    expect(hover.documentSelector!.single.language, equals('dart'));
 
     // didChange should also include pubspec + analysis_options.
     expect(change, isNotNull);
     expect(change.documentSelector, hasLength(greaterThanOrEqualTo(3)));
-    expect(change.documentSelector.any((ds) => ds.language == 'dart'), isTrue);
-    expect(change.documentSelector.any((ds) => ds.pattern == '**/pubspec.yaml'),
+    expect(change.documentSelector!.any((ds) => ds.language == 'dart'), isTrue);
+    expect(
+        change.documentSelector!.any((ds) => ds.pattern == '**/pubspec.yaml'),
         isTrue);
     expect(
-        change.documentSelector
+        change.documentSelector!
             .any((ds) => ds.pattern == '**/analysis_options.yaml'),
         isTrue);
 
@@ -149,7 +148,7 @@
     // When dynamic registration is not supported, we will always statically
     // request text document open/close and incremental updates.
     expect(initResult.capabilities.textDocumentSync, isNotNull);
-    initResult.capabilities.textDocumentSync.map(
+    initResult.capabilities.textDocumentSync!.map(
       (options) {
         expect(options.openClose, isTrue);
         expect(options.change, equals(TextDocumentSyncKind.Incremental));
@@ -169,7 +168,7 @@
     expect(initResult.capabilities.codeActionProvider, isNotNull);
     expect(initResult.capabilities.renameProvider, isNotNull);
     expect(initResult.capabilities.foldingRangeProvider, isNotNull);
-    expect(initResult.capabilities.workspace.fileOperations.willRename,
+    expect(initResult.capabilities.workspace!.fileOperations!.willRename,
         equals(ServerCapabilitiesComputer.fileOperationRegistrationOptions));
     expect(initResult.capabilities.semanticTokensProvider, isNotNull);
 
@@ -226,7 +225,7 @@
     expect(initResult.capabilities.codeActionProvider, isNull);
     expect(initResult.capabilities.renameProvider, isNull);
     expect(initResult.capabilities.foldingRangeProvider, isNull);
-    expect(initResult.capabilities.workspace.fileOperations, isNull);
+    expect(initResult.capabilities.workspace!.fileOperations, isNull);
     expect(initResult.capabilities.semanticTokensProvider, isNull);
 
     // Ensure all expected dynamic registrations.
@@ -465,7 +464,7 @@
     expect(result.capabilities, isNotNull);
     // Check some basic capabilities that are unlikely to change.
     expect(result.capabilities.textDocumentSync, isNotNull);
-    result.capabilities.textDocumentSync.map(
+    result.capabilities.textDocumentSync!.map(
       (options) {
         // We'll always request open/closed notifications and incremental updates.
         expect(options.openClose, isTrue);
@@ -487,7 +486,7 @@
     final response = await sendRequestToServer(request);
     expect(response.id, equals(request.id));
     expect(response.error, isNotNull);
-    expect(response.error.code, equals(ErrorCodes.InvalidParams));
+    expect(response.error!.code, equals(ErrorCodes.InvalidParams));
     expect(response.result, isNull);
   }
 
@@ -497,8 +496,8 @@
     expect(response, isNotNull);
     expect(response.result, isNull);
     expect(response.error, isNotNull);
-    expect(
-        response.error.code, equals(ServerErrorCodes.ServerAlreadyInitialized));
+    expect(response.error!.code,
+        equals(ServerErrorCodes.ServerAlreadyInitialized));
   }
 
   Future<void> test_initialize_rootPath() async {
@@ -643,7 +642,9 @@
 
     // Wait up to 1sec to ensure no error/log notifications were sent back.
     var didTimeout = false;
-    final notificationFromServer = await nextNotification.timeout(
+    final notificationFromServer = await nextNotification
+        .then<NotificationMessage?>((notification) => notification)
+        .timeout(
       const Duration(seconds: 1),
       onTimeout: () {
         didTimeout = true;
@@ -661,6 +662,6 @@
     expect(response.id, equals(request.id));
     expect(response.result, isNull);
     expect(response.error, isNotNull);
-    expect(response.error.code, ErrorCodes.ServerNotInitialized);
+    expect(response.error!.code, ErrorCodes.ServerNotInitialized);
   }
 }
diff --git a/pkg/analysis_server/test/lsp/mapping_test.dart b/pkg/analysis_server/test/lsp/mapping_test.dart
index 6c89580..ce08941 100644
--- a/pkg/analysis_server/test/lsp/mapping_test.dart
+++ b/pkg/analysis_server/test/lsp/mapping_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart' as lsp;
 import 'package:analysis_server/src/lsp/mapping.dart' as lsp;
 import 'package:analysis_server/src/protocol_server.dart' as server;
diff --git a/pkg/analysis_server/test/lsp/outline_test.dart b/pkg/analysis_server/test/lsp/outline_test.dart
index 1c04b0c..4310ec9 100644
--- a/pkg/analysis_server/test/lsp/outline_test.dart
+++ b/pkg/analysis_server/test/lsp/outline_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -33,11 +31,11 @@
 
     expect(outlineBeforeChange, isNotNull);
     expect(outlineBeforeChange.children, hasLength(1));
-    expect(outlineBeforeChange.children[0].element.name, equals('A'));
+    expect(outlineBeforeChange.children![0].element.name, equals('A'));
 
     expect(outlineAfterChange, isNotNull);
     expect(outlineAfterChange.children, hasLength(1));
-    expect(outlineAfterChange.children[0].element.name, equals('B'));
+    expect(outlineAfterChange.children![0].element.name, equals('B'));
   }
 
   Future<void> test_extensions() async {
@@ -53,8 +51,8 @@
 
     expect(outline, isNotNull);
     expect(outline.children, hasLength(2));
-    expect(outline.children[0].element.name, equals('StringExtensions'));
-    expect(outline.children[1].element.name, equals('<unnamed extension>'));
+    expect(outline.children![0].element.name, equals('StringExtensions'));
+    expect(outline.children![1].element.name, equals('<unnamed extension>'));
   }
 
   Future<void> test_initial() async {
@@ -88,7 +86,7 @@
     expect(outline.children, hasLength(1));
 
     // class A
-    final classA = outline.children[0];
+    final classA = outline.children![0];
     expect(classA.element.name, equals('A'));
     expect(classA.element.kind, equals('CLASS'));
     expect(
@@ -109,7 +107,7 @@
     expect(classA.children, hasLength(2));
 
     // b()
-    final methodB = classA.children[0];
+    final methodB = classA.children![0];
     expect(methodB.element.name, equals('b'));
     expect(methodB.element.kind, equals('METHOD'));
     expect(
@@ -130,7 +128,7 @@
     expect(methodB.children, hasLength(1));
 
     // c()
-    final methodC = methodB.children[0];
+    final methodC = methodB.children![0];
     expect(methodC.element.name, equals('c'));
     expect(methodC.element.kind, equals('FUNCTION'));
     expect(
@@ -154,7 +152,7 @@
     expect(methodC.children, isNull);
 
     // num get d
-    final fieldD = classA.children[1];
+    final fieldD = classA.children![1];
     expect(fieldD.element.name, equals('d'));
     expect(fieldD.element.kind, equals('GETTER'));
     expect(
diff --git a/pkg/analysis_server/test/lsp/priority_files_test.dart b/pkg/analysis_server/test/lsp/priority_files_test.dart
index 8d5107c..028f903 100644
--- a/pkg/analysis_server/test/lsp/priority_files_test.dart
+++ b/pkg/analysis_server/test/lsp/priority_files_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
diff --git a/pkg/analysis_server/test/lsp/pub_package_service_test.dart b/pkg/analysis_server/test/lsp/pub_package_service_test.dart
index f40f50a..b00f285 100644
--- a/pkg/analysis_server/test/lsp/pub_package_service_test.dart
+++ b/pkg/analysis_server/test/lsp/pub_package_service_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/src/services/pub/pub_api.dart';
 import 'package:analysis_server/src/services/pub/pub_package_service.dart';
 import 'package:analyzer/instrumentation/service.dart';
@@ -25,12 +23,10 @@
 class PubApiTest {
   static const pubDefaultUrl = 'https://pub.dartlang.org';
 
-  Uri lastCalledUrl;
-  MockHttpClient httpClient;
+  Uri? lastCalledUrl;
+  late MockHttpClient httpClient;
 
-  PubApi api;
-
-  Future<void> check_pubHostedUrl(String envValue, String expectedBase) async {
+  Future<void> check_pubHostedUrl(String? envValue, String expectedBase) async {
     final api =
         PubApi(InstrumentationService.NULL_SERVICE, httpClient, envValue);
     await api.allPackages();
@@ -303,7 +299,7 @@
     await openFile(pubspecFileUri, '');
     await pumpEventQueue();
 
-    final cache = server.pubPackageService.readDiskCache();
+    final cache = server.pubPackageService.readDiskCache()!;
     final packages = cache.packages.values.toList();
 
     expect(packages.map((p) => p.packageName), equals(['one', 'two', 'three']));
diff --git a/pkg/analysis_server/test/lsp/reanalyze_test.dart b/pkg/analysis_server/test/lsp/reanalyze_test.dart
index 150c8a0..69afce8 100644
--- a/pkg/analysis_server/test/lsp/reanalyze_test.dart
+++ b/pkg/analysis_server/test/lsp/reanalyze_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
diff --git a/pkg/analysis_server/test/lsp/references_test.dart b/pkg/analysis_server/test/lsp/references_test.dart
index 9af7eef..350de59 100644
--- a/pkg/analysis_server/test/lsp/references_test.dart
+++ b/pkg/analysis_server/test/lsp/references_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/lsp/rename_test.dart b/pkg/analysis_server/test/lsp/rename_test.dart
index a65a4ef..0559614 100644
--- a/pkg/analysis_server/test/lsp/rename_test.dart
+++ b/pkg/analysis_server/test/lsp/rename_test.dart
@@ -2,11 +2,8 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
-import 'package:meta/meta.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -93,8 +90,8 @@
     expect(response.id, equals(request.id));
     expect(response.result, isNull);
     expect(response.error, isNotNull);
-    expect(response.error.code, ServerErrorCodes.RenameNotValid);
-    expect(response.error.message, contains('is defined in the SDK'));
+    expect(response.error!.code, ServerErrorCodes.RenameNotValid);
+    expect(response.error!.message, contains('is defined in the SDK'));
   }
 
   Future<void> test_prepare_variable() async {
@@ -174,8 +171,9 @@
       action: UserPromptActions.renameAnyway,
     );
 
-    if (response.error != null) {
-      throw response.error;
+    final error = response.error;
+    if (error != null) {
+      throw error;
     }
 
     final result = WorkspaceEdit.fromJson(response.result);
@@ -186,7 +184,7 @@
     };
     applyDocumentChanges(
       contents,
-      result.documentChanges,
+      result.documentChanges!,
     );
     expect(contents[mainFilePath], equals(expectedContent));
   }
@@ -284,12 +282,12 @@
     await openFile(referencedFileUri, withoutMarkers(referencedContent),
         version: referencedVersion);
 
-    final result = await rename(
+    final result = (await rename(
       mainFileUri,
       mainVersion,
       positionFromMarker(mainContent),
       'MyNewClass',
-    );
+    ))!;
 
     // Ensure applying the changes will give us the expected content.
     final contents = {
@@ -302,7 +300,7 @@
     };
     applyDocumentChanges(
       contents,
-      result.documentChanges,
+      result.documentChanges!,
       expectedVersions: documentVersions,
     );
     expect(contents[mainFilePath], equals(expectedMainContent));
@@ -377,8 +375,8 @@
     expect(response.id, equals(request.id));
     expect(response.result, isNull);
     expect(response.error, isNotNull);
-    expect(response.error.code, ServerErrorCodes.RenameNotValid);
-    expect(response.error.message, contains('is defined in the SDK'));
+    expect(response.error!.code, ServerErrorCodes.RenameNotValid);
+    expect(response.error!.message, contains('is defined in the SDK'));
   }
 
   Future<void> test_rename_usingLegacyChangeInterface() async {
@@ -396,18 +394,18 @@
     await initialize();
     await openFile(mainFileUri, withoutMarkers(content), version: 222);
 
-    final result = await rename(
+    final result = (await rename(
       mainFileUri,
       222,
       positionFromMarker(content),
       'MyNewClass',
-    );
+    ))!;
 
     // Ensure applying the changes will give us the expected content.
     final contents = {
       mainFilePath: withoutMarkers(content),
     };
-    applyChanges(contents, result.changes);
+    applyChanges(contents, result.changes!);
     expect(contents[mainFilePath], equals(expectedContent));
   }
 
@@ -444,7 +442,8 @@
         sendRenameVersion: false);
   }
 
-  Future<void> _test_prepare(String content, String expectedPlaceholder) async {
+  Future<void> _test_prepare(
+      String content, String? expectedPlaceholder) async {
     await initialize();
     await openFile(mainFileUri, withoutMarkers(content));
 
@@ -454,7 +453,7 @@
     if (expectedPlaceholder == null) {
       expect(result, isNull);
     } else {
-      expect(result.range, equals(rangeFromMarkers(content)));
+      expect(result!.range, equals(rangeFromMarkers(content)));
       expect(result.placeholder, equals(expectedPlaceholder));
     }
   }
@@ -481,7 +480,7 @@
 
     expect(result.result, isNull);
     expect(result.error, isNotNull);
-    return result.error;
+    return result.error!;
   }
 
   /// Tests a rename that is expected to cause an error, which will trigger
@@ -490,9 +489,9 @@
   Future<ResponseMessage> _test_rename_prompt(
     String content,
     String newName, {
-    @required String expectedMessage,
-    Future<void> Function() beforeResponding,
-    @required String action,
+    required String expectedMessage,
+    Future<void> Function()? beforeResponding,
+    required String action,
     int openFileVersion = 222,
     int renameRequestFileVersion = 222,
   }) async {
@@ -519,9 +518,9 @@
         expect(params.type, equals(MessageType.Warning));
         expect(params.message, equals(expectedMessage));
         expect(params.actions, hasLength(2));
-        expect(params.actions[0],
+        expect(params.actions![0],
             equals(MessageActionItem(title: UserPromptActions.renameAnyway)));
-        expect(params.actions[1],
+        expect(params.actions![1],
             equals(MessageActionItem(title: UserPromptActions.cancel)));
 
         // Allow the test to run some code before we send the response.
@@ -536,8 +535,7 @@
   Future<void> _test_rename_withDocumentChanges(
     String content,
     String newName,
-    String expectedContent, {
-    sendDocumentVersion = true,
+    String? expectedContent, {
     sendRenameVersion = true,
   }) async {
     // The specific number doesn't matter here, it's just a placeholder to confirm
@@ -548,7 +546,7 @@
           withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
     );
     await openFile(mainFileUri, withoutMarkers(content),
-        version: sendDocumentVersion ? documentVersion : null);
+        version: documentVersion);
 
     final result = await rename(
       mainFileUri,
@@ -568,7 +566,7 @@
       };
       applyDocumentChanges(
         contents,
-        result.documentChanges,
+        result!.documentChanges!,
         expectedVersions: documentVersions,
       );
       expect(contents[mainFilePath], equals(expectedContent));
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index bbfcb99..6fcc641 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/lsp/semantic_tokens/legend.dart';
@@ -882,8 +880,8 @@
       o.type == type &&
       listEqual(
           // Treat nulls the same as empty lists for convenience when comparing.
-          o.modifiers ?? <SemanticTokenModifiers>[],
-          modifiers ?? <SemanticTokenModifiers>[],
+          o.modifiers,
+          modifiers,
           (SemanticTokenModifiers a, SemanticTokenModifiers b) => a == b);
 
   /// Outputs a text representation of the token in the form of constructor
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 8091172..986d755 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'dart:async';
 
 import 'package:analysis_server/lsp_protocol/protocol_custom_generated.dart';
@@ -26,7 +24,7 @@
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
 import 'package:analyzer_plugin/src/protocol/protocol_internal.dart' as plugin;
-import 'package:meta/meta.dart';
+import 'package:collection/collection.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart' hide expect;
 import 'package:test/test.dart' as test show expect;
@@ -51,10 +49,10 @@
         ClientCapabilitiesHelperMixin,
         LspAnalysisServerTestMixin,
         ConfigurationFilesMixin {
-  MockLspServerChannel channel;
-  TestPluginManager pluginManager;
-  LspAnalysisServer server;
-  MockHttpClient httpClient;
+  late MockLspServerChannel channel;
+  late TestPluginManager pluginManager;
+  late LspAnalysisServer server;
+  late MockHttpClient httpClient;
 
   /// The number of context builds that had already occurred the last time
   /// resetContextBuildCounter() was called.
@@ -66,11 +64,12 @@
   Stream<Message> get serverToClient => channel.serverToClient;
 
   DiscoveredPluginInfo configureTestPlugin({
-    plugin.ResponseResult respondWith,
-    plugin.Notification notification,
+    plugin.ResponseResult? respondWith,
+    plugin.Notification? notification,
     Duration respondAfter = Duration.zero,
   }) {
-    final info = DiscoveredPluginInfo('a', 'b', 'c', null, null);
+    final info = DiscoveredPluginInfo('a', 'b', 'c', server.notificationManager,
+        server.instrumentationService);
     pluginManager.plugins.add(info);
 
     if (respondWith != null) {
@@ -102,20 +101,21 @@
   Future<T> expectSuccessfulResponseTo<T, R>(
       RequestMessage request, T Function(R) fromJson) async {
     final resp = await sendRequestToServer(request);
-    if (resp.error != null) {
-      throw resp.error;
+    final error = resp.error;
+    if (error != null) {
+      throw error;
     } else {
-      return resp.result == null ? null : fromJson(resp.result);
+      // resp.result should only be null when error != null if T allows null.
+      return resp.result == null ? null as T : fromJson(resp.result);
     }
   }
 
   /// Finds the registration for a given LSP method.
-  Registration registrationFor(
+  Registration? registrationFor(
     List<Registration> registrations,
     Method method,
   ) {
-    return registrations.singleWhere((r) => r.method == method.toJson(),
-        orElse: () => null);
+    return registrations.singleWhereOrNull((r) => r.method == method.toJson());
   }
 
   /// Finds the registration for a given LSP method with Dart in its
@@ -124,13 +124,12 @@
     List<Registration> registrations,
     Method method,
   ) {
-    return registrations.singleWhere(
-        (r) =>
-            r.method == method.toJson() &&
-            TextDocumentRegistrationOptions.fromJson(r.registerOptions)
+    return registrations.singleWhere((r) =>
+        r.method == method.toJson() &&
+        (TextDocumentRegistrationOptions.fromJson(r.registerOptions)
                 .documentSelector
-                .any((selector) => selector.language == dartLanguageId),
-        orElse: () => null);
+                ?.any((selector) => selector.language == dartLanguageId) ??
+            false));
   }
 
   void resetContextBuildCounter() {
@@ -514,8 +513,8 @@
 
   void writePackageConfig(
     String projectFolderPath, {
-    PackageConfigFileBuilder config,
-    String languageVersion,
+    PackageConfigFileBuilder? config,
+    String? languageVersion,
     bool flutter = false,
     bool meta = false,
     bool pedantic = false,
@@ -579,8 +578,11 @@
       Either2<num, String>.t2('client-test');
 
   int _id = 0;
-  String projectFolderPath, mainFilePath, pubspecFilePath, analysisOptionsPath;
-  Uri projectFolderUri, mainFileUri, pubspecFileUri, analysisOptionsUri;
+  late String projectFolderPath,
+      mainFilePath,
+      pubspecFilePath,
+      analysisOptionsPath;
+  late Uri projectFolderUri, mainFileUri, pubspecFileUri, analysisOptionsUri;
   final String simplePubspecContent = 'name: my_project';
   final startOfDocPos = Position(line: 0, character: 0);
   final startOfDocRange = Range(
@@ -590,7 +592,7 @@
   /// The client capabilities sent to the server during initialization.
   ///
   /// null if an initialization request has not yet been sent.
-  ClientCapabilities _clientCapabilities;
+  ClientCapabilities? _clientCapabilities;
 
   final validProgressTokens = <Either2<num, String>>{};
 
@@ -623,7 +625,7 @@
   ) {
     changes.forEach((fileUri, edits) {
       final path = Uri.parse(fileUri).toFilePath();
-      fileContents[path] = applyTextEdits(fileContents[path], edits);
+      fileContents[path] = applyTextEdits(fileContents[path]!, edits);
     });
   }
 
@@ -632,7 +634,7 @@
     Either2<List<TextDocumentEdit>,
             List<Either4<TextDocumentEdit, CreateFile, RenameFile, DeleteFile>>>
         documentChanges, {
-    Map<String, int> expectedVersions,
+    Map<String, int>? expectedVersions,
   }) {
     // If we were supplied with expected versions, ensure that all returned
     // edits match the versions.
@@ -680,7 +682,7 @@
         throw 'Recieved edits for $path which was not provided as a file to be edited. '
             'Perhaps a CreateFile change was missing from the edits?';
       }
-      oldFileContent[path] = applyTextDocumentEdit(oldFileContent[path], edit);
+      oldFileContent[path] = applyTextDocumentEdit(oldFileContent[path]!, edit);
     });
   }
 
@@ -774,13 +776,13 @@
     await sendNotificationToServer(notification);
   }
 
-  Future changeWorkspaceFolders({List<Uri> add, List<Uri> remove}) async {
+  Future changeWorkspaceFolders({List<Uri>? add, List<Uri>? remove}) async {
     var notification = makeNotification(
       Method.workspace_didChangeWorkspaceFolders,
       DidChangeWorkspaceFoldersParams(
         event: WorkspaceFoldersChangeEvent(
-          added: add?.map(toWorkspaceFolder)?.toList() ?? const [],
-          removed: remove?.map(toWorkspaceFolder)?.toList() ?? const [],
+          added: add?.map(toWorkspaceFolder).toList() ?? const [],
+          removed: remove?.map(toWorkspaceFolder).toList() ?? const [],
         ),
       ),
     );
@@ -796,17 +798,17 @@
     await sendNotificationToServer(notification);
   }
 
-  Future<Object> executeCodeAction(
+  Future<Object?> executeCodeAction(
       Either2<Command, CodeAction> codeAction) async {
     final command = codeAction.map(
       (command) => command,
-      (codeAction) => codeAction.command,
+      (codeAction) => codeAction.command!,
     );
     return executeCommand(command);
   }
 
-  Future<Object> executeCommand(Command command,
-      {Either2<num, String> workDoneToken}) async {
+  Future<Object?> executeCommand(Command command,
+      {Either2<num, String>? workDoneToken}) async {
     final request = makeRequest(
       Method.workspace_executeCommand,
       ExecuteCommandParams(
@@ -818,7 +820,7 @@
     return expectSuccessfulResponseTo(request, (result) => result);
   }
 
-  void expect(actual, matcher, {String reason}) =>
+  void expect(actual, matcher, {String? reason}) =>
       test.expect(actual, matcher, reason: reason);
 
   void expectDocumentVersion(
@@ -906,7 +908,7 @@
   Future<T> expectSuccessfulResponseTo<T, R>(
       RequestMessage request, T Function(R) fromJson);
 
-  Future<List<TextEdit>> formatDocument(String fileUri) {
+  Future<List<TextEdit>?> formatDocument(String fileUri) {
     final request = makeRequest(
       Method.textDocument_formatting,
       DocumentFormattingParams(
@@ -920,7 +922,7 @@
         request, _fromJsonList(TextEdit.fromJson));
   }
 
-  Future<List<TextEdit>> formatOnType(
+  Future<List<TextEdit>?> formatOnType(
       String fileUri, Position pos, String character) {
     final request = makeRequest(
       Method.textDocument_onTypeFormatting,
@@ -937,7 +939,7 @@
         request, _fromJsonList(TextEdit.fromJson));
   }
 
-  Future<List<TextEdit>> formatRange(String fileUri, Range range) {
+  Future<List<TextEdit>?> formatRange(String fileUri, Range range) {
     final request = makeRequest(
       Method.textDocument_rangeFormatting,
       DocumentRangeFormattingParams(
@@ -954,8 +956,8 @@
 
   Future<List<Either2<Command, CodeAction>>> getCodeActions(
     String fileUri, {
-    Range range,
-    List<CodeActionKind> kinds,
+    Range? range,
+    List<CodeActionKind>? kinds,
   }) {
     final request = makeRequest(
       Method.textDocument_codeAction,
@@ -976,7 +978,7 @@
   }
 
   Future<List<CompletionItem>> getCompletion(Uri uri, Position pos,
-      {CompletionContext context}) {
+      {CompletionContext? context}) {
     final request = makeRequest(
       Method.textDocument_completion,
       CompletionParams(
@@ -1033,7 +1035,8 @@
     return expectSuccessfulResponseTo(request, DartDiagnosticServer.fromJson);
   }
 
-  Future<List<DocumentHighlight>> getDocumentHighlights(Uri uri, Position pos) {
+  Future<List<DocumentHighlight>?> getDocumentHighlights(
+      Uri uri, Position pos) {
     final request = makeRequest(
       Method.textDocument_documentHighlight,
       TextDocumentPositionParams(
@@ -1074,7 +1077,7 @@
         request, _fromJsonList(FoldingRange.fromJson));
   }
 
-  Future<Hover> getHover(Uri uri, Position pos) {
+  Future<Hover?> getHover(Uri uri, Position pos) {
     final request = makeRequest(
       Method.textDocument_hover,
       TextDocumentPositionParams(
@@ -1121,7 +1124,7 @@
     Uri uri,
     Position pos,
     String label, {
-    CompletionContext context,
+    CompletionContext? context,
   }) async {
     final completions = await getCompletion(uri, pos, context: context);
 
@@ -1152,8 +1155,8 @@
     return expectSuccessfulResponseTo(request, SemanticTokens.fromJson);
   }
 
-  Future<SignatureHelp> getSignatureHelp(Uri uri, Position pos,
-      [SignatureHelpContext context]) {
+  Future<SignatureHelp?> getSignatureHelp(Uri uri, Position pos,
+      [SignatureHelpContext? context]) {
     final request = makeRequest(
       Method.textDocument_signatureHelp,
       SignatureHelpParams(
@@ -1211,10 +1214,10 @@
     Method method,
     R Function(Map<String, dynamic>) fromJson,
     Future<T> Function() f, {
-    @required FutureOr<RR> Function(R) handler,
+    required FutureOr<RR> Function(R) handler,
     Duration timeout = const Duration(seconds: 5),
   }) async {
-    Future<T> outboundRequest;
+    late Future<T> outboundRequest;
 
     // Run [f] and wait for the incoming request from the server.
     final incomingRequest = await expectRequest(method, () {
@@ -1245,23 +1248,24 @@
   /// full objects just to change one value (the types are immutable) so must
   /// match the spec exactly and are not verified.
   Future<ResponseMessage> initialize({
-    String rootPath,
-    Uri rootUri,
-    List<Uri> workspaceFolders,
-    TextDocumentClientCapabilities textDocumentCapabilities,
-    ClientCapabilitiesWorkspace workspaceCapabilities,
-    ClientCapabilitiesWindow windowCapabilities,
-    Map<String, Object> experimentalCapabilities,
-    Map<String, Object> initializationOptions,
+    String? rootPath,
+    Uri? rootUri,
+    List<Uri>? workspaceFolders,
+    TextDocumentClientCapabilities? textDocumentCapabilities,
+    ClientCapabilitiesWorkspace? workspaceCapabilities,
+    ClientCapabilitiesWindow? windowCapabilities,
+    Map<String, Object?>? experimentalCapabilities,
+    Map<String, Object?>? initializationOptions,
     bool throwOnFailure = true,
     bool allowEmptyRootUri = false,
   }) async {
-    _clientCapabilities = ClientCapabilities(
+    final clientCapabilities = ClientCapabilities(
       workspace: workspaceCapabilities,
       textDocument: textDocumentCapabilities,
       window: windowCapabilities,
       experimental: experimentalCapabilities,
     );
+    _clientCapabilities = clientCapabilities;
 
     // Handle any standard incoming requests that aren't test-specific, for example
     // accepting requests to create progress tokens.
@@ -1291,32 +1295,33 @@
           rootPath: rootPath,
           rootUri: rootUri?.toString(),
           initializationOptions: initializationOptions,
-          capabilities: _clientCapabilities,
-          workspaceFolders: workspaceFolders?.map(toWorkspaceFolder)?.toList(),
+          capabilities: clientCapabilities,
+          workspaceFolders: workspaceFolders?.map(toWorkspaceFolder).toList(),
         ));
     final response = await sendRequestToServer(request);
     expect(response.id, equals(request.id));
 
-    if (response.error == null) {
+    final error = response.error;
+    if (error == null) {
       final notification =
           makeNotification(Method.initialized, InitializedParams());
       await sendNotificationToServer(notification);
       await pumpEventQueue();
     } else if (throwOnFailure) {
       throw 'Error during initialize request: '
-          '${response.error.code}: ${response.error.message}';
+          '${error.code}: ${error.message}';
     }
 
     return response;
   }
 
-  NotificationMessage makeNotification(Method method, ToJsonable params) {
+  NotificationMessage makeNotification(Method method, ToJsonable? params) {
     return NotificationMessage(
         method: method, params: params, jsonrpc: jsonRpcVersion);
   }
 
   RequestMessage makeRenameRequest(
-      int version, Uri uri, Position pos, String newName) {
+      int? version, Uri uri, Position pos, String newName) {
     final docIdentifier = version != null
         ? VersionedTextDocumentIdentifier(version: version, uri: uri.toString())
         : TextDocumentIdentifier(uri: uri.toString());
@@ -1328,7 +1333,7 @@
     return request;
   }
 
-  RequestMessage makeRequest(Method method, ToJsonable params) {
+  RequestMessage makeRequest(Method method, ToJsonable? params) {
     final id = Either2<num, String>.t1(_id++);
     return RequestMessage(
         id: id, method: method, params: params, jsonrpc: jsonRpcVersion);
@@ -1386,7 +1391,7 @@
     return expectSuccessfulResponseTo(request, WorkspaceEdit.fromJson);
   }
 
-  Future openFile(Uri uri, String content, {num version = 1}) async {
+  Future openFile(Uri uri, String content, {int version = 1}) async {
     var notification = makeNotification(
       Method.textDocument_didOpen,
       DidOpenTextDocumentParams(
@@ -1415,10 +1420,10 @@
 
   Position positionFromOffset(int offset, String contents) {
     final lineInfo = LineInfo.fromContent(withoutMarkers(contents));
-    return toPosition(lineInfo.getLocation(offset));
+    return toPosition(lineInfo.getLocation(offset) as CharacterLocation);
   }
 
-  Future<RangeAndPlaceholder> prepareRename(Uri uri, Position pos) {
+  Future<RangeAndPlaceholder?> prepareRename(Uri uri, Position pos) {
     final request = makeRequest(
       Method.textDocument_prepareRename,
       TextDocumentPositionParams(
@@ -1457,7 +1462,7 @@
   }
 
   /// Returns the range of [searchText] in [content].
-  Range rangeOfString(String content, String searchText) {
+  Range? rangeOfString(String content, String searchText) {
     content = withoutMarkers(content);
     final startOffset = content.indexOf(searchText);
     return startOffset == -1
@@ -1505,9 +1510,9 @@
     return rangesFromMarkersImpl(content).toList();
   }
 
-  Future<WorkspaceEdit> rename(
+  Future<WorkspaceEdit?> rename(
     Uri uri,
-    int version,
+    int? version,
     Position pos,
     String newName,
   ) {
@@ -1573,7 +1578,7 @@
 
   Future<Null> sendShutdown() {
     final request = makeRequest(Method.shutdown, null);
-    return expectSuccessfulResponseTo(request, (result) => result);
+    return expectSuccessfulResponseTo(request, (result) => result as Null);
   }
 
   /// Creates a [TextEdit] using the `insert` range of a [InsertReplaceEdit].
@@ -1619,7 +1624,7 @@
     await serverToClient.firstWhere((message) {
       if (message is NotificationMessage) {
         if (message.method == CustomMethods.analyzerStatus) {
-          if (_clientCapabilities.window?.workDoneProgress == true) {
+          if (_clientCapabilities!.window?.workDoneProgress == true) {
             throw Exception(
                 'Recieved ${CustomMethods.analyzerStatus} notification '
                 'but client supports workDoneProgress');
@@ -1628,7 +1633,7 @@
           final params = AnalyzerStatusParams.fromJson(message.params);
           return params.isAnalyzing == analyzing;
         } else if (message.method == Method.progress) {
-          if (_clientCapabilities.window?.workDoneProgress != true) {
+          if (_clientCapabilities!.window?.workDoneProgress != true) {
             throw Exception(
                 'Recieved ${CustomMethods.analyzerStatus} notification '
                 'but client supports workDoneProgress');
@@ -1660,7 +1665,7 @@
   }
 
   Future<List<ClosingLabel>> waitForClosingLabels(Uri uri) async {
-    PublishClosingLabelsParams closingLabelsParams;
+    late PublishClosingLabelsParams closingLabelsParams;
     await serverToClient.firstWhere((message) {
       if (message is NotificationMessage &&
           message.method == CustomMethods.publishClosingLabels) {
@@ -1674,13 +1679,14 @@
     return closingLabelsParams.labels;
   }
 
-  Future<List<Diagnostic>> waitForDiagnostics(Uri uri) async {
-    PublishDiagnosticsParams diagnosticParams;
-    await serverToClient.firstWhere((message) {
+  Future<List<Diagnostic>?> waitForDiagnostics(Uri uri) async {
+    PublishDiagnosticsParams? diagnosticParams;
+    await serverToClient.map<Message?>((message) => message).firstWhere(
+        (message) {
       if (message is NotificationMessage &&
           message.method == Method.textDocument_publishDiagnostics) {
         diagnosticParams = PublishDiagnosticsParams.fromJson(message.params);
-        return diagnosticParams.uri == uri.toString();
+        return diagnosticParams!.uri == uri.toString();
       }
       return false;
     }, orElse: () => null);
@@ -1688,7 +1694,7 @@
   }
 
   Future<FlutterOutline> waitForFlutterOutline(Uri uri) async {
-    PublishFlutterOutlineParams outlineParams;
+    late PublishFlutterOutlineParams outlineParams;
     await serverToClient.firstWhere((message) {
       if (message is NotificationMessage &&
           message.method == CustomMethods.publishFlutterOutline) {
@@ -1702,7 +1708,7 @@
   }
 
   Future<Outline> waitForOutline(Uri uri) async {
-    PublishOutlineParams outlineParams;
+    late PublishOutlineParams outlineParams;
     await serverToClient.firstWhere((message) {
       if (message is NotificationMessage &&
           message.method == CustomMethods.publishOutline) {
@@ -1748,7 +1754,7 @@
   }
 
   Future<void> _handleWorkDoneProgressCreate(RequestMessage request) async {
-    if (_clientCapabilities.window?.workDoneProgress != true) {
+    if (_clientCapabilities!.window?.workDoneProgress != true) {
       throw Exception('Server sent ${Method.window_workDoneProgress_create} '
           'but client capabilities do not allow');
     }
@@ -1775,9 +1781,10 @@
       T1 Function(R) fromJson1,
       bool Function(R, LspJsonReporter) canParse2,
       T2 Function(R) fromJson2,
-      [LspJsonReporter reporter]) {
+      [LspJsonReporter? reporter]) {
     reporter ??= nullLspJsonReporter;
     return (input) {
+      reporter!;
       if (canParse1(input, reporter)) {
         return Either2<T1, T2>.t1(fromJson1(input));
       }
diff --git a/pkg/analysis_server/test/lsp/server_test.dart b/pkg/analysis_server/test/lsp/server_test.dart
index 07858b3..c5508eb 100644
--- a/pkg/analysis_server/test/lsp/server_test.dart
+++ b/pkg/analysis_server/test/lsp/server_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/lsp_protocol/protocol_special.dart';
 import 'package:test/test.dart';
@@ -79,7 +77,8 @@
 
     // Wait up to 1sec to ensure no error/log notifications were sent back.
     var didTimeout = false;
-    final notificationFromServer = await firstError.timeout(
+    final notificationFromServer =
+        await firstError.then<NotificationMessage?>((error) => error).timeout(
       const Duration(seconds: 1),
       onTimeout: () {
         didTimeout = true;
@@ -97,7 +96,7 @@
     final response = await channel.sendRequestToServer(request);
     expect(response.id, equals(request.id));
     expect(response.error, isNotNull);
-    expect(response.error.code, equals(ErrorCodes.MethodNotFound));
+    expect(response.error!.code, equals(ErrorCodes.MethodNotFound));
     expect(response.result, isNull);
   }
 
@@ -107,7 +106,7 @@
     final response = await channel.sendRequestToServer(request);
     expect(response.id, equals(request.id));
     expect(response.error, isNotNull);
-    expect(response.error.code, equals(ErrorCodes.MethodNotFound));
+    expect(response.error!.code, equals(ErrorCodes.MethodNotFound));
     expect(response.result, isNull);
   }
 }
diff --git a/pkg/analysis_server/test/lsp/signature_help_test.dart b/pkg/analysis_server/test/lsp/signature_help_test.dart
index 13432a9..9a6300f 100644
--- a/pkg/analysis_server/test/lsp/signature_help_test.dart
+++ b/pkg/analysis_server/test/lsp/signature_help_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -23,11 +21,11 @@
     String expectedLabel,
     String expectedDoc,
     List<ParameterInformation> expectedParams, {
-    MarkupKind expectedFormat = MarkupKind.Markdown,
-    SignatureHelpContext context,
+    MarkupKind? expectedFormat = MarkupKind.Markdown,
+    SignatureHelpContext? context,
   }) async {
-    final res = await getSignatureHelp(
-        mainFileUri, positionFromMarker(fileContent), context);
+    final res = (await getSignatureHelp(
+        mainFileUri, positionFromMarker(fileContent), context))!;
 
     // TODO(dantup): Update this when there is clarification on how to handle
     // no valid selected parameter.
@@ -41,7 +39,7 @@
     // Test the format matches the tests expectation.
     // For clients that don't support MarkupContent it'll be a plain string,
     // but otherwise it'll be a MarkupContent of type PlainText or Markdown.
-    final doc = sig.documentation;
+    final doc = sig.documentation!;
     if (expectedFormat == null) {
       // Plain string.
       expect(doc.valueEquals(expectedDoc), isTrue);
diff --git a/pkg/analysis_server/test/lsp/super_test.dart b/pkg/analysis_server/test/lsp/super_test.dart
index 29eec48..b9192d9 100644
--- a/pkg/analysis_server/test/lsp/super_test.dart
+++ b/pkg/analysis_server/test/lsp/super_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/lsp/will_rename_files_test.dart b/pkg/analysis_server/test/lsp/will_rename_files_test.dart
index 124671d..9d88945 100644
--- a/pkg/analysis_server/test/lsp/will_rename_files_test.dart
+++ b/pkg/analysis_server/test/lsp/will_rename_files_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'dart:async';
 
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
@@ -56,7 +54,7 @@
     final contents = {
       mainFilePath: withoutMarkers(mainContent),
     };
-    applyChanges(contents, edit.changes);
+    applyChanges(contents, edit.changes!);
     expect(contents[mainFilePath], equals(expectedMainContent));
   }
 }
diff --git a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
index 915a8a3..c2715d7 100644
--- a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
+++ b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/lsp_protocol/protocol_special.dart';
 import 'package:test/test.dart';
@@ -100,10 +98,11 @@
     );
 
     final response = await sendRequestToServer(request);
-    expect(response.error.code, equals(ErrorCodes.InvalidParams));
+    final error = response.error!;
+    expect(error.code, equals(ErrorCodes.InvalidParams));
     // Ensure the error is useful to the client.
     expect(
-      response.error.message,
+      error.message,
       equals('Invalid params for workspace/symbol:\n'
           'params.query must not be undefined'),
     );
diff --git a/pkg/analysis_server/test/mocks_lsp.dart b/pkg/analysis_server/test/mocks_lsp.dart
index fdb402e..d8eafef 100644
--- a/pkg/analysis_server/test/mocks_lsp.dart
+++ b/pkg/analysis_server/test/mocks_lsp.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart = 2.9
-
 import 'dart:async';
 import 'dart:convert';
 
@@ -21,8 +19,6 @@
   final StreamController<lsp.Message> _serverToClient =
       StreamController<lsp.Message>.broadcast();
 
-  String name;
-
   /// Completer that will be signalled when the input stream is closed.
   final Completer _closed = Completer();
 
@@ -78,7 +74,7 @@
 
   @override
   void listen(void Function(lsp.Message message) onMessage,
-      {Function onError, void Function() onDone}) {
+      {Function? onError, void Function()? onDone}) {
     _clientToServer.stream.listen(onMessage, onError: onError, onDone: onDone);
   }