diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 3411254..dec0e78 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -15,7 +15,6 @@
 import 'package:analysis_server/src/channel/channel.dart';
 import 'package:analysis_server/src/computer/computer_highlights.dart';
 import 'package:analysis_server/src/context_manager.dart';
-import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/domain_completion.dart';
 import 'package:analysis_server/src/domain_server.dart';
 import 'package:analysis_server/src/domains/analysis/occurrences.dart';
@@ -23,6 +22,18 @@
 import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analysis_server/src/flutter/flutter_domain.dart';
 import 'package:analysis_server/src/flutter/flutter_notifications.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_get_errors.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_get_hover.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_get_imported_elements.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_get_navigation.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_get_signature.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_reanalyze.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_set_analysis_roots.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_set_general_subscriptions.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_set_priority_files.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_set_subscriptions.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_update_content.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_update_options.dart';
 import 'package:analysis_server/src/handler/legacy/analytics_enable.dart';
 import 'package:analysis_server/src/handler/legacy/analytics_is_enabled.dart';
 import 'package:analysis_server/src/handler/legacy/analytics_send_event.dart';
@@ -36,6 +47,7 @@
 import 'package:analysis_server/src/handler/legacy/execution_set_subscriptions.dart';
 import 'package:analysis_server/src/handler/legacy/kythe_get_kythe_entries.dart';
 import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/handler/legacy/unsupported_request.dart';
 import 'package:analysis_server/src/operation/operation_analysis.dart';
 import 'package:analysis_server/src/plugin/notification_manager.dart';
 import 'package:analysis_server/src/protocol_server.dart' as server;
@@ -87,6 +99,23 @@
   /// A map from the name of a request to a function used to create a request
   /// handler.
   static final Map<String, HandlerGenerator> handlerGenerators = {
+    ANALYSIS_REQUEST_GET_ERRORS: AnalysisGetErrorsHandler.new,
+    ANALYSIS_REQUEST_GET_HOVER: AnalysisGetHoverHandler.new,
+    ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS:
+        AnalysisGetImportedElementsHandler.new,
+    ANALYSIS_REQUEST_GET_LIBRARY_DEPENDENCIES: UnsupportedRequestHandler.new,
+    ANALYSIS_REQUEST_GET_NAVIGATION: AnalysisGetNavigationHandler.new,
+    ANALYSIS_REQUEST_GET_REACHABLE_SOURCES: UnsupportedRequestHandler.new,
+    ANALYSIS_REQUEST_GET_SIGNATURE: AnalysisGetSignatureHandler.new,
+    ANALYSIS_REQUEST_REANALYZE: AnalysisReanalyzeHandler.new,
+    ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS: AnalysisSetAnalysisRootsHandler.new,
+    ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS:
+        AnalysisSetGeneralSubscriptionsHandler.new,
+    ANALYSIS_REQUEST_SET_PRIORITY_FILES: AnalysisSetPriorityFilesHandler.new,
+    ANALYSIS_REQUEST_SET_SUBSCRIPTIONS: AnalysisSetSubscriptionsHandler.new,
+    ANALYSIS_REQUEST_UPDATE_CONTENT: AnalysisUpdateContentHandler.new,
+    ANALYSIS_REQUEST_UPDATE_OPTIONS: AnalysisUpdateOptionsHandler.new,
+    //
     ANALYTICS_REQUEST_IS_ENABLED: AnalyticsIsEnabledHandler.new,
     ANALYTICS_REQUEST_ENABLE: AnalyticsEnableHandler.new,
     ANALYTICS_REQUEST_SEND_EVENT: AnalyticsSendEventHandler.new,
@@ -267,7 +296,6 @@
         .listen(handleRequest, onDone: done, onError: error);
     handlers = <server.RequestHandler>[
       ServerDomainHandler(this),
-      AnalysisDomainHandler(this),
       EditDomainHandler(this),
       SearchDomainHandler(this),
       CompletionDomainHandler(this),
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
deleted file mode 100644
index 5c7458c..0000000
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) 2014, 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.
-
-import 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/src/domain_abstract.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_get_errors.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_get_hover.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_get_imported_elements.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_get_navigation.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_get_signature.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_reanalyze.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_set_analysis_roots.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_set_general_subscriptions.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_set_priority_files.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_set_subscriptions.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_update_content.dart';
-import 'package:analysis_server/src/handler/legacy/analysis_update_options.dart';
-import 'package:analysis_server/src/handler/legacy/unsupported_request.dart';
-import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analyzer/src/utilities/cancellation.dart';
-
-/// Instances of the class [AnalysisDomainHandler] implement a [RequestHandler]
-/// that handles requests in the `analysis` domain.
-class AnalysisDomainHandler extends AbstractRequestHandler {
-  /// Initialize a newly created handler to handle requests for the given
-  /// [server].
-  AnalysisDomainHandler(super.server);
-
-  @override
-  Response? handleRequest(
-      Request request, CancellationToken cancellationToken) {
-    try {
-      var requestName = request.method;
-      if (requestName == ANALYSIS_REQUEST_GET_ERRORS) {
-        AnalysisGetErrorsHandler(server, request, cancellationToken).handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_GET_HOVER) {
-        AnalysisGetHoverHandler(server, request, cancellationToken).handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS) {
-        AnalysisGetImportedElementsHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_GET_LIBRARY_DEPENDENCIES) {
-        UnsupportedRequestHandler(server, request, cancellationToken).handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_GET_NAVIGATION) {
-        AnalysisGetNavigationHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_GET_REACHABLE_SOURCES) {
-        UnsupportedRequestHandler(server, request, cancellationToken).handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_GET_SIGNATURE) {
-        AnalysisGetSignatureHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_REANALYZE) {
-        AnalysisReanalyzeHandler(server, request, cancellationToken).handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS) {
-        AnalysisSetAnalysisRootsHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS) {
-        AnalysisSetGeneralSubscriptionsHandler(
-                server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_SET_PRIORITY_FILES) {
-        AnalysisSetPriorityFilesHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_SET_SUBSCRIPTIONS) {
-        AnalysisSetSubscriptionsHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_UPDATE_CONTENT) {
-        AnalysisUpdateContentHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == ANALYSIS_REQUEST_UPDATE_OPTIONS) {
-        AnalysisUpdateOptionsHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      }
-    } on RequestFailure catch (exception) {
-      return exception.response;
-    }
-    return null;
-  }
-}
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index 8d2f844..ae3a12c 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -7,7 +7,6 @@
 import 'package:analysis_server/protocol/protocol_generated.dart'
     hide AnalysisOptions;
 import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
 import 'package:analysis_server/src/utilities/mocks.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
@@ -16,7 +15,6 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
-import 'package:analyzer/src/utilities/cancellation.dart';
 import 'package:meta/meta.dart';
 import 'package:test/test.dart';
 
@@ -42,7 +40,6 @@
   late MockServerChannel serverChannel;
   late TestPluginManager pluginManager;
   late AnalysisServer server;
-  late RequestHandler handler;
 
   final List<GeneralAnalysisService> generalServices =
       <GeneralAnalysisService>[];
@@ -55,10 +52,6 @@
 
   AbstractAnalysisTest();
 
-  AnalysisDomainHandler get analysisHandler =>
-      server.handlers.singleWhere((handler) => handler is AnalysisDomainHandler)
-          as AnalysisDomainHandler;
-
   AnalysisOptions get analysisOptions => testDiver.analysisOptions;
 
   AnalysisDriver get testDiver => server.getAnalysisDriver(testFile)!;
@@ -78,13 +71,6 @@
     await waitResponse(request);
   }
 
-  void addGeneralAnalysisSubscription(GeneralAnalysisService service) {
-    generalServices.add(service);
-    var request =
-        AnalysisSetGeneralSubscriptionsParams(generalServices).toRequest('0');
-    handleSuccessfulRequest(request);
-  }
-
   String addTestFile(String content) {
     newFile(testFile, content);
     testCode = content;
@@ -144,14 +130,6 @@
     return offset;
   }
 
-  /// Validates that the given [request] is handled successfully.
-  Response handleSuccessfulRequest(Request request, {RequestHandler? handler}) {
-    handler ??= this.handler;
-    var response = handler.handleRequest(request, NotCancelableToken())!;
-    expect(response, isResponseSuccess(request.id));
-    return response;
-  }
-
   String modifyTestFile(String content) {
     modifyFile(testFile, content);
     testCode = content;
@@ -164,18 +142,6 @@
     }
   }
 
-  void removeGeneralAnalysisSubscription(GeneralAnalysisService service) {
-    generalServices.remove(service);
-    var request =
-        AnalysisSetGeneralSubscriptionsParams(generalServices).toRequest('0');
-    handleSuccessfulRequest(request);
-  }
-
-  void setPriorityFiles(List<String> files) {
-    var request = AnalysisSetPriorityFilesParams(files).toRequest('0');
-    handleSuccessfulRequest(request);
-  }
-
   Future<Response> setRoots({
     required List<String> included,
     required List<String> excluded,
@@ -202,7 +168,6 @@
     pluginManager = TestPluginManager();
     server = createAnalysisServer();
     server.pluginManager = pluginManager;
-    handler = analysisHandler;
     serverChannel.notifications.listen(processNotification);
   }
 
diff --git a/tools/VERSION b/tools/VERSION
index 03b2173..088c41a 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 50
+PRERELEASE 51
 PRERELEASE_PATCH 0
\ No newline at end of file
