Convert the analysics domain to handlers

Change-Id: I957a2a84ac7c8fdebc1fce80dccf4716964f5647
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/239761
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/domain_analytics.dart b/pkg/analysis_server/lib/src/domain_analytics.dart
index cec9fa8..1460410 100644
--- a/pkg/analysis_server/lib/src/domain_analytics.dart
+++ b/pkg/analysis_server/lib/src/domain_analytics.dart
@@ -4,10 +4,12 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.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';
+import 'package:analysis_server/src/handler/legacy/analytics_send_timing.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
-import 'package:telemetry/telemetry.dart';
 
 /// Instances of the class [AnalyticsDomainHandler] implement a [RequestHandler]
 /// that handles requests in the `analytics` domain.
@@ -16,61 +18,24 @@
 
   AnalyticsDomainHandler(this.server);
 
-  Analytics? get analytics => server.analytics;
-
-  String get _clientId => server.options.clientId ?? 'client';
-
-  Response handleEnable(Request request) {
-    var params = AnalyticsEnableParams.fromRequest(request);
-    final analytics = this.analytics;
-    if (analytics != null) {
-      analytics.enabled = params.value;
-    }
-    return AnalyticsEnableResult().toResponse(request.id);
-  }
-
-  Response handleIsEnabled(Request request) {
-    return AnalyticsIsEnabledResult(analytics?.enabled ?? false)
-        .toResponse(request.id);
-  }
-
   @override
   Response? handleRequest(
       Request request, CancellationToken cancellationToken) {
     var requestName = request.method;
 
     if (requestName == ANALYTICS_REQUEST_IS_ENABLED) {
-      return handleIsEnabled(request);
+      AnalyticsIsEnabledHandler(server, request, cancellationToken).handle();
+      return Response.DELAYED_RESPONSE;
     } else if (requestName == ANALYTICS_REQUEST_ENABLE) {
-      return handleEnable(request);
+      AnalyticsEnableHandler(server, request, cancellationToken).handle();
+      return Response.DELAYED_RESPONSE;
     } else if (requestName == ANALYTICS_REQUEST_SEND_EVENT) {
-      return handleSendEvent(request);
+      AnalyticsSendEventHandler(server, request, cancellationToken).handle();
+      return Response.DELAYED_RESPONSE;
     } else if (requestName == ANALYTICS_REQUEST_SEND_TIMING) {
-      return handleSendTiming(request);
+      AnalyticsSendTimingHandler(server, request, cancellationToken).handle();
+      return Response.DELAYED_RESPONSE;
     }
-
     return null;
   }
-
-  Response handleSendEvent(Request request) {
-    final analytics = this.analytics;
-    if (analytics == null) {
-      return AnalyticsSendEventResult().toResponse(request.id);
-    }
-
-    var params = AnalyticsSendEventParams.fromRequest(request);
-    analytics.sendEvent(_clientId, params.action);
-    return AnalyticsSendEventResult().toResponse(request.id);
-  }
-
-  Response handleSendTiming(Request request) {
-    final analytics = this.analytics;
-    if (analytics == null) {
-      return AnalyticsSendTimingResult().toResponse(request.id);
-    }
-
-    var params = AnalyticsSendTimingParams.fromRequest(request);
-    analytics.sendTiming(params.event, params.millis, category: _clientId);
-    return AnalyticsSendTimingResult().toResponse(request.id);
-  }
 }
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analytics_enable.dart b/pkg/analysis_server/lib/src/handler/legacy/analytics_enable.dart
new file mode 100644
index 0000000..5b5a927
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analytics_enable.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2022, 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 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+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/utilities/progress.dart';
+
+/// The handler for the `analytics.enable` request.
+class AnalyticsEnableHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalyticsEnableHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalyticsEnableParams.fromRequest(request);
+    final analytics = server.analytics;
+    if (analytics != null) {
+      analytics.enabled = params.value;
+    }
+    sendResult(AnalyticsEnableResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analytics_is_enabled.dart b/pkg/analysis_server/lib/src/handler/legacy/analytics_is_enabled.dart
new file mode 100644
index 0000000..a4d3bfb
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analytics_is_enabled.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2022, 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 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+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/utilities/progress.dart';
+
+/// The handler for the `analytics.isEnabled` request.
+class AnalyticsIsEnabledHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalyticsIsEnabledHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    sendResult(AnalyticsIsEnabledResult(server.analytics?.enabled ?? false));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analytics_send_event.dart b/pkg/analysis_server/lib/src/handler/legacy/analytics_send_event.dart
new file mode 100644
index 0000000..ea1aee4
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analytics_send_event.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2022, 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 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+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/utilities/progress.dart';
+
+/// The handler for the `analytics.sendEvent` request.
+class AnalyticsSendEventHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalyticsSendEventHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  String get _clientId => server.options.clientId ?? 'client';
+
+  @override
+  Future<void> handle() async {
+    final analytics = server.analytics;
+    if (analytics == null) {
+      sendResult(AnalyticsSendEventResult());
+      return;
+    }
+
+    var params = AnalyticsSendEventParams.fromRequest(request);
+    analytics.sendEvent(_clientId, params.action);
+    sendResult(AnalyticsSendEventResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analytics_send_timing.dart b/pkg/analysis_server/lib/src/handler/legacy/analytics_send_timing.dart
new file mode 100644
index 0000000..bb9961e
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analytics_send_timing.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2022, 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 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+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/utilities/progress.dart';
+
+/// The handler for the `analytics.sendTiming` request.
+class AnalyticsSendTimingHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalyticsSendTimingHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  String get _clientId => server.options.clientId ?? 'client';
+
+  @override
+  Future<void> handle() async {
+    final analytics = server.analytics;
+    if (analytics == null) {
+      sendResult(AnalyticsSendTimingResult());
+      return;
+    }
+
+    var params = AnalyticsSendTimingParams.fromRequest(request);
+    analytics.sendTiming(params.event, params.millis, category: _clientId);
+    sendResult(AnalyticsSendTimingResult());
+  }
+}