DAS plugins: Respond to real assist requests

Change-Id: I1f1afca0dc746948410a56e29cf13bebef234ed7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/419760
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/analysis_server_plugin/lib/src/plugin_server.dart b/pkg/analysis_server_plugin/lib/src/plugin_server.dart
index 0a0da44..05acd40 100644
--- a/pkg/analysis_server_plugin/lib/src/plugin_server.dart
+++ b/pkg/analysis_server_plugin/lib/src/plugin_server.dart
@@ -453,7 +453,12 @@
         result = await _handleAnalysisUpdateContent(params);
 
       case protocol.COMPLETION_REQUEST_GET_SUGGESTIONS:
+        result = null;
+
       case protocol.EDIT_REQUEST_GET_ASSISTS:
+        var params = protocol.EditGetAssistsParams.fromRequest(request);
+        result = await handleEditGetAssists(params);
+
       case protocol.EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS:
         result = null;
 
diff --git a/pkg/analysis_server_plugin/test/src/plugin_server_test.dart b/pkg/analysis_server_plugin/test/src/plugin_server_test.dart
index ce3b532..5b04ab8 100644
--- a/pkg/analysis_server_plugin/test/src/plugin_server_test.dart
+++ b/pkg/analysis_server_plugin/test/src/plugin_server_test.dart
@@ -105,6 +105,19 @@
     expect(assist.change.edits, hasLength(1));
   }
 
+  Future<void> test_handleEditGetAssists_viaSendRequest() async {
+    writeAnalysisOptionsWithPlugin();
+    newFile(filePath, 'bool b = false;');
+
+    await channel
+        .sendRequest(protocol.AnalysisSetContextRootsParams([contextRoot]));
+
+    var response = await channel.sendRequest(
+        protocol.EditGetAssistsParams(filePath, 'bool b = '.length, 1));
+    var result = protocol.EditGetAssistsResult.fromResponse(response);
+    expect(result.assists, hasLength(1));
+  }
+
   Future<void> test_handleEditGetFixes() async {
     writeAnalysisOptionsWithPlugin();
     newFile(filePath, 'bool b = false;');
@@ -118,6 +131,19 @@
     expect(fixes.fixes, hasLength(4));
   }
 
+  Future<void> test_handleEditGetFixes_viaSendRequest() async {
+    writeAnalysisOptionsWithPlugin();
+    newFile(filePath, 'bool b = false;');
+
+    await channel
+        .sendRequest(protocol.AnalysisSetContextRootsParams([contextRoot]));
+
+    var response = await channel
+        .sendRequest(protocol.EditGetFixesParams(filePath, 'bool b = '.length));
+    var result = protocol.EditGetFixesResult.fromResponse(response);
+    expect(result.fixes.first.fixes, hasLength(4));
+  }
+
   Future<void> test_lintDiagnosticsAreDisabledByDefault() async {
     writeAnalysisOptionsWithPlugin();
     newFile(filePath, 'double x = 3.14;');
@@ -258,6 +284,30 @@
   }
 }
 
+class _InvertBoolean extends ResolvedCorrectionProducer {
+  static const _invertBooleanKind =
+      AssistKind('dart.fix.invertBooelan', 50, 'Invert Boolean value');
+
+  _InvertBoolean({required super.context});
+
+  @override
+  CorrectionApplicability get applicability =>
+      CorrectionApplicability.singleLocation;
+
+  @override
+  AssistKind get assistKind => _invertBooleanKind;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    if (node case BooleanLiteral(:var value)) {
+      await builder.addDartFileEdit(file, (builder) {
+        var invertedValue = (!value).toString();
+        builder.addSimpleReplacement(range.node(node), invertedValue);
+      });
+    }
+  }
+}
+
 class _NoLiteralsPlugin extends Plugin {
   @override
   void register(PluginRegistry registry) {
@@ -290,27 +340,3 @@
     });
   }
 }
-
-class _InvertBoolean extends ResolvedCorrectionProducer {
-  static const _invertBooleanKind =
-      AssistKind('dart.fix.invertBooelan', 50, 'Invert Boolean value');
-
-  _InvertBoolean({required super.context});
-
-  @override
-  CorrectionApplicability get applicability =>
-      CorrectionApplicability.singleLocation;
-
-  @override
-  AssistKind get assistKind => _invertBooleanKind;
-
-  @override
-  Future<void> compute(ChangeBuilder builder) async {
-    if (node case BooleanLiteral(:var value)) {
-      await builder.addDartFileEdit(file, (builder) {
-        var invertedValue = (!value).toString();
-        builder.addSimpleReplacement(range.node(node), invertedValue);
-      });
-    }
-  }
-}