[analyzer] Tidy up some LSP null-safe changes

Change-Id: I0090d524180463ccd0c0240ece59b2386b9eb408
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/195993
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index 796e555..09a9fbe 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -74,7 +74,7 @@
   final DartSdkManager sdkManager;
 
   /// The [SearchEngine] for this server.
-  late SearchEngine searchEngine;
+  late final SearchEngine searchEngine;
 
   late ByteStore byteStore;
 
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 2468770..4c5becb 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -72,9 +72,6 @@
 /// Instances of the class [EditDomainHandler] implement a [RequestHandler]
 /// that handles requests in the edit domain.
 class EditDomainHandler extends AbstractRequestHandler {
-  /// The [SearchEngine] for this server.
-  SearchEngine? searchEngine;
-
   /// The workspace for rename refactorings.
   RefactoringWorkspace? refactoringWorkspace;
 
@@ -84,9 +81,8 @@
   /// Initialize a newly created handler to handle requests for the given
   /// [server].
   EditDomainHandler(AnalysisServer server) : super(server) {
-    var search = searchEngine = server.searchEngine;
     refactoringWorkspace =
-        RefactoringWorkspace(server.driverMap.values, search);
+        RefactoringWorkspace(server.driverMap.values, server.searchEngine);
     _newRefactoringManager();
   }
 
@@ -815,10 +811,6 @@
   }
 
   Response _getAvailableRefactorings(Request request) {
-    if (searchEngine == null) {
-      var result = EditGetAvailableRefactoringsResult([]);
-      return result.toResponse(request.id);
-    }
     _getAvailableRefactoringsImpl(request);
     return Response.DELAYED_RESPONSE;
   }
@@ -836,7 +828,7 @@
     // add refactoring kinds
     var kinds = <RefactoringKind>[];
     // Check nodes.
-    final searchEngine = this.searchEngine;
+    final searchEngine = server.searchEngine;
     {
       var resolvedUnit = await server.getResolvedUnit(file);
       if (resolvedUnit != null) {
@@ -845,19 +837,15 @@
             .isAvailable()) {
           kinds.add(RefactoringKind.EXTRACT_LOCAL_VARIABLE);
         }
-        if (searchEngine != null) {
-          // Try EXTRACT_METHOD.
-          if (ExtractMethodRefactoring(
-                  searchEngine, resolvedUnit, offset, length)
-              .isAvailable()) {
-            kinds.add(RefactoringKind.EXTRACT_METHOD);
-          }
-          // Try EXTRACT_WIDGETS.
-          if (ExtractWidgetRefactoring(
-                  searchEngine, resolvedUnit, offset, length)
-              .isAvailable()) {
-            kinds.add(RefactoringKind.EXTRACT_WIDGET);
-          }
+        // Try EXTRACT_METHOD.
+        if (ExtractMethodRefactoring(searchEngine, resolvedUnit, offset, length)
+            .isAvailable()) {
+          kinds.add(RefactoringKind.EXTRACT_METHOD);
+        }
+        // Try EXTRACT_WIDGETS.
+        if (ExtractWidgetRefactoring(searchEngine, resolvedUnit, offset, length)
+            .isAvailable()) {
+          kinds.add(RefactoringKind.EXTRACT_WIDGET);
         }
       }
     }
@@ -869,7 +857,7 @@
         var element = server.getElementOfNode(node);
         if (element != null) {
           // try CONVERT_METHOD_TO_GETTER
-          if (element is ExecutableElement && searchEngine != null) {
+          if (element is ExecutableElement) {
             Refactoring refactoring = ConvertMethodToGetterRefactoring(
                 searchEngine, resolvedUnit.session, element);
             var status = await refactoring.checkInitialConditions();
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
index c74cdb2..5bbfefc 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
@@ -178,8 +178,8 @@
   /// If multiple actions have the same position, one will arbitrarily be chosen.
   List<CodeAction> _dedupeActions(Iterable<CodeAction> actions, Position pos) {
     final groups = groupBy(actions, (CodeAction action) => action.title);
-    return groups.keys.map((title) {
-      final actions = groups[title]!;
+    return groups.entries.map((entry) {
+      final actions = entry.value;
 
       // If there's only one in the group, just return it.
       if (actions.length == 1) {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
index 751fdca..634324a 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -150,8 +150,8 @@
 
           final key =
               _createImportedSymbolKey(elementName, declaringLibraryUri);
-          alreadyImportedSymbols.putIfAbsent(key, () => <String>{});
-          alreadyImportedSymbols[key]!
+          alreadyImportedSymbols
+              .putIfAbsent(key, () => <String>{})
               .add('${importedLibrary.librarySource.uri}');
         }
       }
diff --git a/pkg/analysis_server/lib/src/lsp/notification_manager.dart b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
index dc45460..6afaeec 100644
--- a/pkg/analysis_server/lib/src/lsp/notification_manager.dart
+++ b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
@@ -30,7 +30,8 @@
       String filePath, List<protocol.AnalysisError> errors) {
     final diagnostics = errors
         .map((error) => pluginToDiagnostic(
-              // We should never errors for a file we can't get a LineInfo for
+              // We should never return errors for a file we can't get a
+              // LineInfo for
               (path) => server.getLineInfo(path)!,
               error,
               supportedTags: server.clientCapabilities?.diagnosticTags,
diff --git a/pkg/analysis_server/lib/src/search/search_domain.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
index 0ee46f1..0ae754c 100644
--- a/pkg/analysis_server/lib/src/search/search_domain.dart
+++ b/pkg/analysis_server/lib/src/search/search_domain.dart
@@ -18,23 +18,15 @@
   /// The analysis server that is using this handler to process requests.
   final AnalysisServer server;
 
-  /// The [SearchEngine] for this server.
-  final SearchEngine? searchEngine;
-
   /// The next search response id.
   int _nextSearchId = 0;
 
   /// Initialize a newly created handler to handle requests for the given
   /// [server].
-  SearchDomainHandler(this.server) : searchEngine = server.searchEngine;
+  SearchDomainHandler(this.server);
 
   Future<void> findElementReferences(protocol.Request request) async {
-    final searchEngine = this.searchEngine;
-    if (searchEngine == null) {
-      server.sendResponse(
-          Response.unsupportedFeature(request.id, 'Search has been disabled.'));
-      return;
-    }
+    final searchEngine = server.searchEngine;
     var params =
         protocol.SearchFindElementReferencesParams.fromRequest(request);
     var file = params.file;
@@ -66,12 +58,7 @@
   }
 
   Future findMemberDeclarations(protocol.Request request) async {
-    final searchEngine = this.searchEngine;
-    if (searchEngine == null) {
-      server.sendResponse(
-          Response.unsupportedFeature(request.id, 'Search has been disabled.'));
-      return;
-    }
+    final searchEngine = server.searchEngine;
     var params =
         protocol.SearchFindMemberDeclarationsParams.fromRequest(request);
     await server.onAnalysisComplete;
@@ -85,12 +72,7 @@
   }
 
   Future findMemberReferences(protocol.Request request) async {
-    final searchEngine = this.searchEngine;
-    if (searchEngine == null) {
-      server.sendResponse(
-          Response.unsupportedFeature(request.id, 'Search has been disabled.'));
-      return;
-    }
+    final searchEngine = server.searchEngine;
     var params = protocol.SearchFindMemberReferencesParams.fromRequest(request);
     await server.onAnalysisComplete;
     // respond
@@ -103,12 +85,7 @@
   }
 
   Future findTopLevelDeclarations(protocol.Request request) async {
-    final searchEngine = this.searchEngine;
-    if (searchEngine == null) {
-      server.sendResponse(
-          Response.unsupportedFeature(request.id, 'Search has been disabled.'));
-      return;
-    }
+    final searchEngine = server.searchEngine;
     var params =
         protocol.SearchFindTopLevelDeclarationsParams.fromRequest(request);
     try {
@@ -217,12 +194,7 @@
 
   /// Implement the `search.getTypeHierarchy` request.
   Future getTypeHierarchy(protocol.Request request) async {
-    final searchEngine = this.searchEngine;
-    if (searchEngine == null) {
-      server.sendResponse(
-          Response.unsupportedFeature(request.id, 'Search has been disabled.'));
-      return;
-    }
+    final searchEngine = server.searchEngine;
     var params = protocol.SearchGetTypeHierarchyParams.fromRequest(request);
     var file = params.file;
     // prepare element