diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index f91ecc5..2eff1ad 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -8,8 +8,7 @@
 import 'dart:math' show max;
 
 import 'package:analysis_server/protocol/protocol.dart';
-import 'package:analysis_server/protocol/protocol_constants.dart'
-    show PROTOCOL_VERSION;
+import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart'
     hide AnalysisOptions;
 import 'package:analysis_server/src/analysis_server_abstract.dart';
@@ -20,7 +19,6 @@
 import 'package:analysis_server/src/domain_analytics.dart';
 import 'package:analysis_server/src/domain_completion.dart';
 import 'package:analysis_server/src/domain_diagnostic.dart';
-import 'package:analysis_server/src/domain_execution.dart';
 import 'package:analysis_server/src/domain_kythe.dart';
 import 'package:analysis_server/src/domain_server.dart';
 import 'package:analysis_server/src/domains/analysis/occurrences.dart';
@@ -28,6 +26,12 @@
 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/execution_create_context.dart';
+import 'package:analysis_server/src/handler/legacy/execution_delete_context.dart';
+import 'package:analysis_server/src/handler/legacy/execution_get_suggestions.dart';
+import 'package:analysis_server/src/handler/legacy/execution_map_uri.dart';
+import 'package:analysis_server/src/handler/legacy/execution_set_subscriptions.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.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;
@@ -65,11 +69,30 @@
 import 'package:telemetry/telemetry.dart' as telemetry;
 import 'package:watcher/watcher.dart';
 
+/// A function that can be executed to create a handler for a request.
+typedef HandlerGenerator = LegacyHandler Function(
+    AnalysisServer, Request, CancellationToken);
+
 typedef OptionUpdater = void Function(AnalysisOptionsImpl options);
 
 /// Instances of the class [AnalysisServer] implement a server that listens on a
 /// [CommunicationChannel] for analysis requests and process them.
 class AnalysisServer extends AbstractAnalysisServer {
+  /// A map from the name of a request to a function used to create a request
+  /// handler.
+  static final Map<String, HandlerGenerator> handlerGenerators = {
+    EXECUTION_REQUEST_CREATE_CONTEXT: (server, request, cancellationToken) =>
+        ExecutionCreateContextHandler(server, request, cancellationToken),
+    EXECUTION_REQUEST_DELETE_CONTEXT: (server, request, cancellationToken) =>
+        ExecutionDeleteContextHandler(server, request, cancellationToken),
+    EXECUTION_REQUEST_GET_SUGGESTIONS: (server, request, cancellationToken) =>
+        ExecutionGetSuggestionsHandler(server, request, cancellationToken),
+    EXECUTION_REQUEST_MAP_URI: (server, request, cancellationToken) =>
+        ExecutionMapUriHandler(server, request, cancellationToken),
+    EXECUTION_REQUEST_SET_SUBSCRIPTIONS: (server, request, cancellationToken) =>
+        ExecutionSetSubscriptionsHandler(server, request, cancellationToken),
+  };
+
   /// The channel from which requests are received and to which responses should
   /// be sent.
   final ServerCommunicationChannel channel;
@@ -225,7 +248,6 @@
       EditDomainHandler(this),
       SearchDomainHandler(this),
       CompletionDomainHandler(this),
-      ExecutionDomainHandler(this, executionContext),
       DiagnosticDomainHandler(this),
       AnalyticsDomainHandler(this),
       KytheDomainHandler(this),
@@ -295,33 +317,54 @@
     runZonedGuarded(() {
       var cancellationToken = CancelableToken();
       cancellationTokens[request.id] = cancellationToken;
-      var count = handlers.length;
-      for (var i = 0; i < count; i++) {
+      var generator = handlerGenerators[request.method];
+      if (generator != null) {
         try {
-          var response = handlers[i].handleRequest(request, cancellationToken);
-          if (response == Response.DELAYED_RESPONSE) {
-            return;
-          }
-          if (response != null) {
-            sendResponse(response);
-            return;
-          }
+          var handler = generator(this, request, cancellationToken);
+          handler.handle();
         } on InconsistentAnalysisException {
           sendResponse(Response.contentModified(request));
-          return;
         } on RequestFailure catch (exception) {
           sendResponse(exception.response);
-          return;
         } catch (exception, stackTrace) {
           var error =
               RequestError(RequestErrorCode.SERVER_ERROR, exception.toString());
           error.stackTrace = stackTrace.toString();
           var response = Response(request.id, error: error);
           sendResponse(response);
-          return;
         }
+      } else {
+        // TODO(brianwilkerson) When all the handlers are in [handlerGenerators]
+        //  remove local variable and for loop below.
+        var count = handlers.length;
+        for (var i = 0; i < count; i++) {
+          try {
+            var response =
+                handlers[i].handleRequest(request, cancellationToken);
+            if (response == Response.DELAYED_RESPONSE) {
+              return;
+            }
+            if (response != null) {
+              sendResponse(response);
+              return;
+            }
+          } on InconsistentAnalysisException {
+            sendResponse(Response.contentModified(request));
+            return;
+          } on RequestFailure catch (exception) {
+            sendResponse(exception.response);
+            return;
+          } catch (exception, stackTrace) {
+            var error = RequestError(
+                RequestErrorCode.SERVER_ERROR, exception.toString());
+            error.stackTrace = stackTrace.toString();
+            var response = Response(request.id, error: error);
+            sendResponse(response);
+            return;
+          }
+        }
+        sendResponse(Response.unknownRequest(request));
       }
-      sendResponse(Response.unknownRequest(request));
     }, (exception, stackTrace) {
       instrumentationService.logException(
         FatalException(
diff --git a/pkg/analysis_server/lib/src/domain_execution.dart b/pkg/analysis_server/lib/src/domain_execution.dart
deleted file mode 100644
index cdedc79..0000000
--- a/pkg/analysis_server/lib/src/domain_execution.dart
+++ /dev/null
@@ -1,63 +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/analysis_server.dart';
-import 'package:analysis_server/src/handler/legacy/execution_create_context.dart';
-import 'package:analysis_server/src/handler/legacy/execution_delete_context.dart';
-import 'package:analysis_server/src/handler/legacy/execution_get_suggestions.dart';
-import 'package:analysis_server/src/handler/legacy/execution_map_uri.dart';
-import 'package:analysis_server/src/handler/legacy/execution_set_subscriptions.dart';
-import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analysis_server/src/services/execution/execution_context.dart';
-import 'package:analyzer/src/utilities/cancellation.dart';
-
-/// Instances of the class [ExecutionDomainHandler] implement a [RequestHandler]
-/// that handles requests in the `execution` domain.
-class ExecutionDomainHandler implements RequestHandler {
-  /// The analysis server that is using this handler to process requests.
-  final AnalysisServer server;
-
-  /// The context used by the execution domain handlers.
-  final ExecutionContext executionContext;
-
-  /// Initialize a newly created handler to handle requests for the given
-  /// [server].
-  ExecutionDomainHandler(this.server, this.executionContext);
-
-  @override
-  Response? handleRequest(
-      Request request, CancellationToken cancellationToken) {
-    try {
-      var requestName = request.method;
-      if (requestName == EXECUTION_REQUEST_CREATE_CONTEXT) {
-        ExecutionCreateContextHandler(
-                server, request, cancellationToken, executionContext)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == EXECUTION_REQUEST_DELETE_CONTEXT) {
-        ExecutionDeleteContextHandler(
-                server, request, cancellationToken, executionContext)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == EXECUTION_REQUEST_GET_SUGGESTIONS) {
-        ExecutionGetSuggestionsHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == EXECUTION_REQUEST_MAP_URI) {
-        ExecutionMapUriHandler(
-                server, request, cancellationToken, executionContext)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      } else if (requestName == EXECUTION_REQUEST_SET_SUBSCRIPTIONS) {
-        ExecutionSetSubscriptionsHandler(server, request, cancellationToken)
-            .handle();
-        return Response.DELAYED_RESPONSE;
-      }
-    } on RequestFailure catch (exception) {
-      return exception.response;
-    }
-    return null;
-  }
-}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/execution_create_context.dart b/pkg/analysis_server/lib/src/handler/legacy/execution_create_context.dart
index 40ca6e1..67bed11 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/execution_create_context.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/execution_create_context.dart
@@ -8,23 +8,20 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
-import 'package:analysis_server/src/services/execution/execution_context.dart';
 import 'package:analyzer/src/utilities/cancellation.dart';
 
 /// The handler for the `execution.createContext` request.
 class ExecutionCreateContextHandler extends LegacyHandler {
-  /// The context used by the execution domain handlers.
-  final ExecutionContext executionContext;
-
   /// Initialize a newly created handler to be able to service requests for the
   /// [server].
   ExecutionCreateContextHandler(AnalysisServer server, Request request,
-      CancellationToken cancellationToken, this.executionContext)
+      CancellationToken cancellationToken)
       : super(server, request, cancellationToken);
 
   @override
   Future<void> handle() async {
     var file = ExecutionCreateContextParams.fromRequest(request).contextRoot;
+    var executionContext = server.executionContext;
     var contextId = (executionContext.nextContextId++).toString();
     executionContext.contextMap[contextId] = file;
     sendResult(ExecutionCreateContextResult(contextId));
diff --git a/pkg/analysis_server/lib/src/handler/legacy/execution_delete_context.dart b/pkg/analysis_server/lib/src/handler/legacy/execution_delete_context.dart
index e4b7aae..07b7701 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/execution_delete_context.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/execution_delete_context.dart
@@ -8,24 +8,20 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
-import 'package:analysis_server/src/services/execution/execution_context.dart';
 import 'package:analyzer/src/utilities/cancellation.dart';
 
 /// The handler for the `execution.deleteContext` request.
 class ExecutionDeleteContextHandler extends LegacyHandler {
-  /// The context used by the execution domain handlers.
-  final ExecutionContext executionContext;
-
   /// Initialize a newly created handler to be able to service requests for the
   /// [server].
   ExecutionDeleteContextHandler(AnalysisServer server, Request request,
-      CancellationToken cancellationToken, this.executionContext)
+      CancellationToken cancellationToken)
       : super(server, request, cancellationToken);
 
   @override
   Future<void> handle() async {
     var contextId = ExecutionDeleteContextParams.fromRequest(request).id;
-    executionContext.contextMap.remove(contextId);
+    server.executionContext.contextMap.remove(contextId);
     sendResult(ExecutionDeleteContextResult());
   }
 }
diff --git a/pkg/analysis_server/lib/src/handler/legacy/execution_map_uri.dart b/pkg/analysis_server/lib/src/handler/legacy/execution_map_uri.dart
index a33a85a..27c59d0 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/execution_map_uri.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/execution_map_uri.dart
@@ -8,26 +8,22 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
-import 'package:analysis_server/src/services/execution/execution_context.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/utilities/cancellation.dart';
 
 /// The handler for the `execution.mapUri` request.
 class ExecutionMapUriHandler extends LegacyHandler {
-  /// The context used by the execution domain handlers.
-  final ExecutionContext executionContext;
-
   /// Initialize a newly created handler to be able to service requests for the
   /// [server].
   ExecutionMapUriHandler(AnalysisServer server, Request request,
-      CancellationToken cancellationToken, this.executionContext)
+      CancellationToken cancellationToken)
       : super(server, request, cancellationToken);
 
   @override
   Future<void> handle() async {
     var params = ExecutionMapUriParams.fromRequest(request);
     var contextId = params.id;
-    var path = executionContext.contextMap[contextId];
+    var path = server.executionContext.contextMap[contextId];
     if (path == null) {
       sendResponse(Response.invalidParameter(request, 'id',
           'There is no execution context with an id of $contextId'));
diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart
index 42550dc..e1ec249 100644
--- a/pkg/analysis_server/test/domain_execution_test.dart
+++ b/pkg/analysis_server/test/domain_execution_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/domain_execution.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -124,7 +123,6 @@
   Future<void> setUp() async {
     super.setUp();
     await createProject();
-    handler = ExecutionDomainHandler(server, server.executionContext);
     await _createExecutionContext(testFile);
   }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 2322191..1b46725 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -739,8 +739,6 @@
     for (var directive in directivesToResolve) {
       directive.element = _libraryElement;
     }
-
-    // TODO(scheglov) remove DirectiveResolver class
   }
 
   void _resolveFile(FileState file, CompilationUnit unit) {
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index 1510042..84c6754 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -665,8 +665,6 @@
     for (var directive in directivesToResolve) {
       directive.element = _libraryElement;
     }
-
-    // TODO(scheglov) remove DirectiveResolver class
   }
 
   void _resolveFile({
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 29a2a01..0f87a11 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -258,10 +258,7 @@
   /// unit containing the node being visited. The [typeProvider] is the object
   /// used to access the types from the core library. The [errorListener] is the
   /// error listener that will be informed of any errors that are found during
-  /// resolution. The [nameScope] is the scope used to resolve identifiers in
-  /// the node that will first be visited.  If `null` or unspecified, a new
-  /// [LibraryScope] will be created based on [definingLibrary] and
-  /// [typeProvider].
+  /// resolution.
   ///
   /// TODO(paulberry): make [featureSet] a required parameter (this will be a
   /// breaking change).
@@ -2910,7 +2907,7 @@
   /// [definingLibrary] is the element for the library containing the node being
   /// visited.
   /// [source] is the source representing the compilation unit containing the
-  /// node being visited
+  /// node being visited.
   /// [typeProvider] is the object used to access the types from the core
   /// library.
   /// [errorListener] is the error listener that will be informed of any errors
diff --git a/tools/VERSION b/tools/VERSION
index a082332..db9b0e4 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 282
+PRERELEASE 283
 PRERELEASE_PATCH 0
\ No newline at end of file
