Migrate pkg/analysis_server/test/integration/analysis/

Change-Id: I6dc636c06e13d1ac1da6caf2e33443baca08315d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/194001
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index a34a056..a9b8464 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -12,6 +12,7 @@
 import 'package:analysis_server/src/computer/computer_signature.dart';
 import 'package:analysis_server/src/computer/imported_elements_computer.dart';
 import 'package:analysis_server/src/domain_abstract.dart';
+import 'package:analysis_server/src/domain_analysis_flags.dart';
 import 'package:analysis_server/src/plugin/request_converter.dart';
 import 'package:analysis_server/src/plugin/result_merger.dart';
 import 'package:analysis_server/src/protocol/protocol_internal.dart';
@@ -22,9 +23,6 @@
 import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
 import 'package:analyzer_plugin/utilities/navigation/navigation_dart.dart';
 
-// TODO(devoncarew): See #31456 for the tracking issue to remove this flag.
-final bool disableManageImportsOnPaste = true;
-
 /// Instances of the class [AnalysisDomainHandler] implement a [RequestHandler]
 /// that handles requests in the `analysis` domain.
 class AnalysisDomainHandler extends AbstractRequestHandler {
diff --git a/pkg/analysis_server/lib/src/domain_analysis_flags.dart b/pkg/analysis_server/lib/src/domain_analysis_flags.dart
new file mode 100644
index 0000000..c1196be
--- /dev/null
+++ b/pkg/analysis_server/lib/src/domain_analysis_flags.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2021, 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.
+
+// TODO(devoncarew): See #31456 for the tracking issue to remove this flag.
+final bool disableManageImportsOnPaste = true;
diff --git a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
index d0afbc3..5033928 100644
--- a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/analysis_options_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:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
@@ -38,7 +36,7 @@
     await analysisFinished;
 
     expect(currentAnalysisErrors[options], isList);
-    var errors = currentAnalysisErrors[options];
+    var errors = existingErrorsForFile(options);
     expect(errors, hasLength(1));
     var error = errors[0];
     expect(error.location.file, options);
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index b5d5fb7..e674a76 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_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/protocol/protocol_generated.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
@@ -33,7 +31,7 @@
     await analysisFinished;
 
     expect(currentAnalysisErrors[filePath], isList);
-    var errors = currentAnalysisErrors[filePath];
+    var errors = existingErrorsForFile(filePath);
     expect(errors, hasLength(1));
     expect(errors[0].location.file, equals(filePath));
   }
@@ -47,7 +45,7 @@
     standardAnalysisSetup();
     return analysisFinished.then((_) {
       expect(currentAnalysisErrors[pathname], isList);
-      var errors = currentAnalysisErrors[pathname];
+      var errors = existingErrorsForFile(pathname);
       expect(errors, hasLength(1));
       expect(errors[0].location.file, equals(pathname));
     });
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
index 1b0de2d..fb8cb1e 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_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:io';
 
 import 'package:path/path.dart' as path;
@@ -78,7 +76,7 @@
   }
 
   @override
-  Future startServer({int diagnosticPort, int servicesPort}) {
+  Future startServer({int? diagnosticPort, int? servicesPort}) {
     var sdkPath = createNonStandardSdk();
     return server.start(
         diagnosticPort: diagnosticPort,
@@ -95,7 +93,7 @@
     writeFile(pathname, text);
     standardAnalysisSetup();
     await analysisFinished;
-    var errors = currentAnalysisErrors[pathname];
+    var errors = existingErrorsForFile(pathname);
     expect(errors, hasLength(1));
     expect(errors[0].code, 'unused_import');
   }
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
index 61d8b52..260cb6c 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_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/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
index 6da5c92..2c4828c 100644
--- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_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/protocol/protocol_generated.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
@@ -21,7 +19,7 @@
 class AnalysisGetHoverIntegrationTest
     extends AbstractAnalysisServerIntegrationTest {
   /// Pathname of the file containing Dart code.
-  String pathname;
+  late String pathname;
 
   /// Dart code under test.
   final String text = r'''
@@ -55,17 +53,17 @@
   /// literal value.  [parameterRegexps] means is a set of regexps which should
   /// match the hover parameters.  [propagatedType], if specified, is the
   /// expected propagated type of the element.
-  Future<AnalysisGetHoverResult> checkHover(
+  Future<AnalysisGetHoverResult?> checkHover(
     String target,
     int length,
-    List<String> descriptionRegexps,
-    String kind,
-    List<String> staticTypeRegexps, {
+    List<String>? descriptionRegexps,
+    String? kind,
+    List<String>? staticTypeRegexps, {
     bool isLocal = false,
     bool isCore = false,
-    String docRegexp,
+    String? docRegexp,
     bool isLiteral = false,
-    List<String> parameterRegexps,
+    List<String>? parameterRegexps,
   }) {
     var offset = text.indexOf(target);
     return sendAnalysisGetHover(pathname, offset).then((result) async {
@@ -74,7 +72,7 @@
       expect(info.offset, equals(offset));
       expect(info.length, equals(length));
       if (isCore) {
-        expect(path.basename(info.containingLibraryPath), equals('core.dart'));
+        expect(path.basename(info.containingLibraryPath!), equals('core.dart'));
         expect(info.containingLibraryName, equals('dart:core'));
       } else if (isLocal || isLiteral) {
         expect(info.containingLibraryPath, isNull);
diff --git a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
index 6aac49a..547b6d9 100644
--- a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
@@ -2,10 +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/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/domain_analysis.dart';
+import 'package:analysis_server/src/domain_analysis_flags.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -22,10 +20,10 @@
 class AnalysisGetImportedElementsIntegrationTest
     extends AbstractAnalysisServerIntegrationTest {
   /// Pathname of the file containing Dart code.
-  String pathname;
+  late String pathname;
 
   /// Dart code under test.
-  String text;
+  late String text;
 
   /// Check that an analysis.getImportedElements request on the region starting
   /// with the first character that matches [target] and having the given
diff --git a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
index ff3fd0f..caf757e 100644
--- a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_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';
 
@@ -41,7 +39,7 @@
     expect(libraries.any((String lib) => lib.endsWith('core/core.dart')), true);
 
     expect(packageMaps.keys, hasLength(1));
-    var map = packageMaps[packageMaps.keys.first];
+    var map = packageMaps[packageMaps.keys.first]!;
     expect(map.keys, isEmpty);
   }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
index fc0a57b..1288adb 100644
--- a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_navigation_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:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
index 15309a6..0073bde 100644
--- a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_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:io';
 
 import 'package:test/test.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index c4c8fe2..cb5baf6 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_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/protocol/protocol_generated.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
@@ -19,7 +17,7 @@
 
 @reflectiveTest
 class AnalysisHighlightsTest extends AbstractAnalysisServerIntegrationTest {
-  Map<HighlightRegionType, Set<String>> highlights;
+  late Map<HighlightRegionType, Set<String>> highlights;
 
   void check(HighlightRegionType type, List<String> expected) {
     expect(highlights[type], equals(expected.toSet()));
@@ -41,10 +39,7 @@
         var endIndex = startIndex + region.length;
         var highlightedText = text.substring(startIndex, endIndex);
         var type = region.type;
-        if (!highlights.containsKey(type)) {
-          highlights[type] = <String>{};
-        }
-        highlights[type].add(highlightedText);
+        highlights.putIfAbsent(type, () => {}).add(highlightedText);
       }
     });
     await analysisFinished;
@@ -52,8 +47,8 @@
 
   @override
   Future startServer({
-    int diagnosticPort,
-    int servicesPort,
+    int? diagnosticPort,
+    int? servicesPort,
   }) {
     return server.start(
         diagnosticPort: diagnosticPort,
diff --git a/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
index 5398abf..38428ff 100644
--- a/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_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/integration/analysis/lint_test.dart b/pkg/analysis_server/test/integration/analysis/lint_test.dart
index 5b11ea0..a41d0f5 100644
--- a/pkg/analysis_server/test/integration/analysis/lint_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/lint_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:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
@@ -50,7 +48,7 @@
     await analysisFinished;
 
     expect(currentAnalysisErrors[source], isList);
-    var errors = currentAnalysisErrors[source];
+    var errors = existingErrorsForFile(source);
     expect(errors, hasLength(1));
     var error = errors[0];
     expect(error.location.file, source);
diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
index 763097e..7d217d2 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_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/protocol/protocol_generated.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
@@ -60,22 +58,19 @@
     sendAnalysisSetSubscriptions({
       AnalysisService.NAVIGATION: [pathname1]
     });
-    List<NavigationRegion> regions;
-    List<NavigationTarget> targets;
-    List<String> targetFiles;
-    onAnalysisNavigation.listen((AnalysisNavigationParams params) {
-      expect(params.file, equals(pathname1));
-      regions = params.regions;
-      targets = params.targets;
-      targetFiles = params.files;
-    });
-
-    await analysisFinished;
 
     // There should be a single error, due to the fact that 'dart:async' is not
     // used.
+    await analysisFinished;
     expect(currentAnalysisErrors[pathname1], hasLength(1));
     expect(currentAnalysisErrors[pathname2], isEmpty);
+
+    var params = await onAnalysisNavigation.first;
+    expect(params.file, equals(pathname1));
+    var regions = params.regions;
+    var targets = params.targets;
+    var targetFiles = params.files;
+
     NavigationTarget findTargetElement(int index) {
       for (var region in regions) {
         if (region.offset <= index && index < region.offset + region.length) {
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 0332e23..e1b8d1c 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -2,10 +2,7 @@
 // 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/protocol/protocol_generated.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -19,7 +16,7 @@
 
 @reflectiveTest
 class OccurrencesTest extends AbstractAnalysisServerIntegrationTest {
-  Future<void> test_occurrences() {
+  Future<void> test_occurrences() async {
     var pathname = sourcePath('test.dart');
     var text = r'''
 main() {
@@ -37,33 +34,33 @@
     sendAnalysisSetSubscriptions({
       AnalysisService.OCCURRENCES: [pathname]
     });
-    List<Occurrences> occurrences;
-    onAnalysisOccurrences.listen((AnalysisOccurrencesParams params) {
-      expect(params.file, equals(pathname));
-      occurrences = params.occurrences;
-    });
-    return analysisFinished.then((_) {
-      expect(currentAnalysisErrors[pathname], isEmpty);
-      Set<int> findOffsets(String elementName) {
-        for (var occurrence in occurrences) {
-          if (occurrence.element.name == elementName) {
-            return occurrence.offsets.toSet();
-          }
+
+    await analysisFinished;
+    expect(currentAnalysisErrors[pathname], isEmpty);
+
+    var params = await onAnalysisOccurrences.first;
+    expect(params.file, equals(pathname));
+    var occurrences = params.occurrences;
+
+    Set<int> findOffsets(String elementName) {
+      for (var occurrence in occurrences) {
+        if (occurrence.element.name == elementName) {
+          return occurrence.offsets.toSet();
         }
-        fail('No element found matching $elementName');
       }
+      fail('No element found matching $elementName');
+    }
 
-      void check(String elementName, Iterable<String> expectedOccurrences) {
-        var expectedOffsets = expectedOccurrences
-            .map((String substring) => text.indexOf(substring))
-            .toSet();
-        var foundOffsets = findOffsets(elementName);
-        expect(foundOffsets, equals(expectedOffsets));
-      }
+    void check(String elementName, Iterable<String> expectedOccurrences) {
+      var expectedOffsets = expectedOccurrences
+          .map((String substring) => text.indexOf(substring))
+          .toSet();
+      var foundOffsets = findOffsets(elementName);
+      expect(foundOffsets, equals(expectedOffsets));
+    }
 
-      check('i', ['i = 0', 'i < 10', 'i++', 'i;']);
-      check('j', ['j = 0', 'j < i', 'j++', 'j;']);
-      check('sum', ['sum = 0', 'sum +=', 'sum)']);
-    });
+    check('i', ['i = 0', 'i < 10', 'i++', 'i;']);
+    check('j', ['j = 0', 'j < i', 'j++', 'j;']);
+    check('sum', ['sum = 0', 'sum +=', 'sum)']);
   }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart
index bc498f8..df5a0ea 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/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/protocol/protocol_generated.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
@@ -19,7 +17,7 @@
 
 @reflectiveTest
 class OutlineTest extends AbstractAnalysisServerIntegrationTest {
-  Future<void> test_outline() {
+  Future<void> test_outline() async {
     var pathname = sourcePath('test.dart');
     var text = r'''
 class Class1 {
@@ -47,27 +45,26 @@
     sendAnalysisSetSubscriptions({
       AnalysisService.OUTLINE: [pathname]
     });
-    Outline outline;
-    onAnalysisOutline.listen((AnalysisOutlineParams params) {
-      expect(params.file, equals(pathname));
-      outline = params.outline;
-    });
-    return analysisFinished.then((_) {
-      expect(outline.element.kind, equals(ElementKind.COMPILATION_UNIT));
-      expect(outline.offset, equals(0));
-      expect(outline.length, equals(text.length));
-      var classes = outline.children;
-      expect(classes, hasLength(2));
-      expect(classes[0].element.name, equals('Class1'));
-      expect(classes[1].element.name, equals('Class2'));
 
-      var members = classes[0].children;
-      expect(members, hasLength(5));
-      expect(members[0].element.name, equals('field'));
-      expect(members[1].element.name, equals('method'));
-      expect(members[2].element.name, equals('staticMethod'));
-      expect(members[3].element.name, equals('getter'));
-      expect(members[4].element.name, equals('setter'));
-    });
+    var params = await onAnalysisOutline.first;
+    expect(params.file, equals(pathname));
+    var outline = params.outline;
+
+    expect(outline.element.kind, equals(ElementKind.COMPILATION_UNIT));
+    expect(outline.offset, equals(0));
+    expect(outline.length, equals(text.length));
+
+    var classes = outline.children!;
+    expect(classes, hasLength(2));
+    expect(classes[0].element.name, equals('Class1'));
+    expect(classes[1].element.name, equals('Class2'));
+
+    var members = classes[0].children!;
+    expect(members, hasLength(5));
+    expect(members[0].element.name, equals('field'));
+    expect(members[1].element.name, equals('method'));
+    expect(members[2].element.name, equals('staticMethod'));
+    expect(members[3].element.name, equals('getter'));
+    expect(members[4].element.name, equals('setter'));
   }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/overrides_test.dart b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
index 912ac03..0358bb4 100644
--- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/overrides_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/protocol/protocol_generated.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -18,7 +16,7 @@
 
 @reflectiveTest
 class OverridesTest extends AbstractAnalysisServerIntegrationTest {
-  Future<void> test_overrides() {
+  Future<void> test_overrides() async {
     var pathname = sourcePath('test.dart');
     var text = r'''
 abstract class Interface1 {
@@ -58,67 +56,69 @@
     sendAnalysisSetSubscriptions({
       AnalysisService.OVERRIDES: [pathname]
     });
-    List<Override> overrides;
-    onAnalysisOverrides.listen((AnalysisOverridesParams params) {
-      expect(params.file, equals(pathname));
-      overrides = params.overrides;
-    });
-    return analysisFinished.then((_) {
-      var targetOffset = text.indexOf('Target');
-      Override findOverride(String methodName) {
-        var methodOffset = text.indexOf(methodName, targetOffset);
-        for (var override in overrides) {
-          if (override.offset == methodOffset) {
-            return override;
-          }
-        }
-        return null;
-      }
 
-      void checkOverrides(String methodName, bool expectedOverridesBase,
-          List<String> expectedOverridesInterfaces) {
-        var override = findOverride(methodName);
-        if (!expectedOverridesBase && expectedOverridesInterfaces.isEmpty) {
-          // This method overrides nothing, so it should not appear in the
-          // overrides list.
-          expect(override, isNull);
-          return;
-        } else {
-          expect(override, isNotNull);
-        }
-        expect(override.length, equals(methodName.length));
-        var superclassMember = override.superclassMember;
-        if (expectedOverridesBase) {
-          expect(superclassMember.element.name, equals(methodName));
-          expect(superclassMember.className, equals('Base'));
-        } else {
-          expect(superclassMember, isNull);
-        }
-        var interfaceMembers = override.interfaceMembers;
-        if (expectedOverridesInterfaces.isNotEmpty) {
-          expect(interfaceMembers, isNotNull);
-          var actualOverridesInterfaces = <String>{};
-          for (var overriddenMember in interfaceMembers) {
-            expect(overriddenMember.element.name, equals(methodName));
-            var className = overriddenMember.className;
-            var wasAdded = actualOverridesInterfaces.add(className);
-            expect(wasAdded, isTrue);
-          }
-          expect(actualOverridesInterfaces,
-              equals(expectedOverridesInterfaces.toSet()));
-        } else {
-          expect(interfaceMembers, isNull);
+    var params = await onAnalysisOverrides.first;
+    expect(params.file, equals(pathname));
+    var overrides = params.overrides;
+
+    var targetOffset = text.indexOf('Target');
+
+    Override? findOverride(String methodName) {
+      var methodOffset = text.indexOf(methodName, targetOffset);
+      for (var override in overrides) {
+        if (override.offset == methodOffset) {
+          return override;
         }
       }
+      return null;
+    }
 
-      checkOverrides('method0', true, ['Interface1', 'Interface2']);
-      checkOverrides('method1', false, ['Interface1', 'Interface2']);
-      checkOverrides('method2', true, ['Interface1']);
-      checkOverrides('method3', false, ['Interface1']);
-      checkOverrides('method4', true, ['Interface2']);
-      checkOverrides('method5', false, ['Interface2']);
-      checkOverrides('method6', true, []);
-      checkOverrides('method7', false, []);
-    });
+    void checkOverrides(String methodName, bool expectedOverridesBase,
+        List<String> expectedOverridesInterfaces) {
+      var override = findOverride(methodName);
+
+      if (!expectedOverridesBase && expectedOverridesInterfaces.isEmpty) {
+        // This method overrides nothing, so it should not appear in the
+        // overrides list.
+        expect(override, isNull);
+        return;
+      } else {
+        override!;
+      }
+
+      expect(override.length, equals(methodName.length));
+      var superclassMember = override.superclassMember;
+      if (expectedOverridesBase) {
+        superclassMember!;
+        expect(superclassMember.element.name, equals(methodName));
+        expect(superclassMember.className, equals('Base'));
+      } else {
+        expect(superclassMember, isNull);
+      }
+      var interfaceMembers = override.interfaceMembers;
+      if (expectedOverridesInterfaces.isNotEmpty) {
+        interfaceMembers!;
+        var actualOverridesInterfaces = <String>{};
+        for (var overriddenMember in interfaceMembers) {
+          expect(overriddenMember.element.name, equals(methodName));
+          var className = overriddenMember.className;
+          var wasAdded = actualOverridesInterfaces.add(className);
+          expect(wasAdded, isTrue);
+        }
+        expect(actualOverridesInterfaces,
+            equals(expectedOverridesInterfaces.toSet()));
+      } else {
+        expect(interfaceMembers, isNull);
+      }
+    }
+
+    checkOverrides('method0', true, ['Interface1', 'Interface2']);
+    checkOverrides('method1', false, ['Interface1', 'Interface2']);
+    checkOverrides('method2', true, ['Interface1']);
+    checkOverrides('method3', false, ['Interface1']);
+    checkOverrides('method4', true, ['Interface2']);
+    checkOverrides('method5', false, ['Interface2']);
+    checkOverrides('method6', true, []);
+    checkOverrides('method7', false, []);
   }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/package_root_test.dart b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
index 6c7801b..3bb2096 100644
--- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/package_root_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/protocol/protocol_generated.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:path/path.dart' as path;
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
index 7cf4371..1a42362 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_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
-
 /// This test verifies that if reanalysis is performed while reanalysis is in
 /// progress, no problems occur.
 ///
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
index ddfd145..6534bab 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/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/protocol/protocol_generated.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -27,10 +25,9 @@
       // Make sure that reanalyze causes analysis to restart.
       var analysisRestarted = false;
       onServerStatus.listen((ServerStatusParams data) {
-        if (data.analysis != null) {
-          if (data.analysis.isAnalyzing) {
-            analysisRestarted = true;
-          }
+        var analysisStatus = data.analysis;
+        if (analysisStatus != null && analysisStatus.isAnalyzing) {
+          analysisRestarted = true;
         }
       });
       sendAnalysisReanalyze();
diff --git a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
index 2ef9e06..c8b991d 100644
--- a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_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/integration/analysis/set_general_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
index 3523f2a..18cc929 100644
--- a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_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/protocol/protocol_generated.dart';
 import 'package:path/path.dart' show join;
 import 'package:test/test.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
index 01898a7..bc7b3e4 100644
--- a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_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';
 
@@ -26,6 +24,7 @@
     await sendAnalysisSetPriorityFiles([pathname]);
 
     var status = await analysisFinished;
-    expect(status.analysis.isAnalyzing, false);
+    var analysisStatus = status.analysis;
+    expect(analysisStatus != null && analysisStatus.isAnalyzing, false);
   }
 }
diff --git a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
index bfb9365..d9d22d0 100644
--- a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_subscriptions_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/integration/analysis/test_all.dart b/pkg/analysis_server/test/integration/analysis/test_all.dart
index 7bb5fd1..2e463f0 100644
--- a/pkg/analysis_server/test/integration/analysis/test_all.dart
+++ b/pkg/analysis_server/test/integration/analysis/test_all.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_reflective_loader/test_reflective_loader.dart';
 
 import 'analysis_options_test.dart' as analysis_options_test;
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
index adb66f3..40c015c 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_list_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:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index 5760287..524b73c 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_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:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -78,7 +76,7 @@
     standardAnalysisSetup();
     await analysisFinished;
     expect(currentAnalysisErrors[pathname], isList);
-    var errors1 = currentAnalysisErrors[pathname];
+    var errors1 = existingErrorsForFile(pathname);
     expect(errors1, hasLength(1));
     expect(errors1[0].location.file, equals(pathname));
 
@@ -99,7 +97,7 @@
     });
     await analysisFinished;
     expect(currentAnalysisErrors[pathname], isList);
-    var errors2 = currentAnalysisErrors[pathname];
+    var errors2 = existingErrorsForFile(pathname);
     expect(errors2, hasLength(1));
     expect(errors2[0].location.file, equals(pathname));
   }
diff --git a/pkg/analysis_server/test/integration/analysis/update_options_test.dart b/pkg/analysis_server/test/integration/analysis/update_options_test.dart
index cd18c90..4864f2c 100644
--- a/pkg/analysis_server/test/integration/analysis/update_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_options_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/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/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index 71bc4ce..b135280 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -139,6 +139,16 @@
     server.debugStdio();
   }
 
+  /// If there was a set of errors (might be empty) received for the file
+  /// with the given [path], return it. If no errors - fail.
+  List<AnalysisError> existingErrorsForFile(String path) {
+    var errors = currentAnalysisErrors[path];
+    if (errors == null) {
+      fail('Expected errors for: $path');
+    }
+    return errors;
+  }
+
   List<AnalysisError>? getErrors(String pathname) =>
       currentAnalysisErrors[pathname];