[DAS] Fixes when clause cases on 'Convert to switch expression' assist

Fixes: https://github.com/dart-lang/sdk/issues/60966
Change-Id: I68187c06528f7328a832bdb6d11170f233ab5e2a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/435921
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Auto-Submit: Felipe Morschel <git@fmorschel.dev>
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart
index 5407bbd..c97a9b1 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart
@@ -106,7 +106,11 @@
                       invocation.offset,
                       invocation.argumentList.leftParenthesis.end,
                     );
-            builder.addDeletion(deletion);
+            if (hasComment) {
+              builder.addDeletion(deletion);
+            } else {
+              builder.addSimpleReplacement(deletion, ' ');
+            }
             builder.addDeletion(
               range.entity(invocation.argumentList.rightParenthesis),
             );
@@ -154,12 +158,12 @@
             var lastColon = lastCase.colon;
 
             var patternCode = group.patternCases
-                .map((patternCase) => patternCase.guardedPattern.pattern)
+                .map((patternCase) => patternCase.guardedPattern)
                 .map((pattern) => utils.getNodeText(pattern))
                 .join(' || ');
             builder.addSimpleReplacement(
               range.startEnd(firstCase.keyword, lastColon),
-              '$patternCode => ',
+              '$patternCode =>',
             );
 
             convertArgumentStatements(
@@ -248,7 +252,7 @@
             var lastColon = lastCase.colon;
 
             var patternCode = group.patternCases
-                .map((patternCase) => patternCase.guardedPattern.pattern)
+                .map((patternCase) => patternCase.guardedPattern)
                 .map((pattern) => utils.getNodeText(pattern))
                 .join(' || ');
             builder.addSimpleReplacement(
@@ -334,7 +338,7 @@
             var lastCase = group.patternCases.last;
 
             var patternCode = group.patternCases
-                .map((patternCase) => patternCase.guardedPattern.pattern)
+                .map((patternCase) => patternCase.guardedPattern)
                 .map((pattern) => utils.getNodeText(pattern))
                 .join(' || ');
             builder.addSimpleReplacement(
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_switch_expression_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_switch_expression_test.dart
index b403d62..8519ef2 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_switch_expression_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_switch_expression_test.dart
@@ -100,8 +100,8 @@
     Color.red => 'red', // Red.
     Color.blue => 'blue',
     // Not green.
-    Color.green =>  throw 'Green is bad',
-    Color.yellow => /**/
+    Color.green => throw 'Green is bad',
+    Color.yellow =>
       // Yellow is OK.
       'yellow'
   });
@@ -164,8 +164,8 @@
     Color.red => 'red', // Red.
     Color.blue => 'blue',
     // Not green.
-    Color.green =>  throw 'Green is bad',
-    Color.yellow => /**/
+    Color.green => throw 'Green is bad',
+    Color.yellow =>
       // Yellow is OK.
       'yellow'
   });
@@ -191,7 +191,28 @@
   print(switch (s) {
     'foo' => 'foo',
     'bar' => 'bar',
-    _ =>  throw 'unrecognized'
+    _ => throw 'unrecognized'
+  });
+}
+''');
+  }
+
+  Future<void> test_argument_when() async {
+    await resolveTestCode('''
+void foo(int a, bool x) {
+  swit^ch (a) {
+    case 1 when x:
+      print(1);
+    default:
+      print(3);
+  }
+}
+''');
+    await assertHasAssist('''
+void foo(int a, bool x) {
+  print(switch (a) {
+    1 when x => 1,
+    _ => 3
   });
 }
 ''');
@@ -476,6 +497,29 @@
 ''');
   }
 
+  Future<void> test_assignment_when() async {
+    await resolveTestCode('''
+void foo(int a, bool x) {
+  int value;
+  swit^ch (a) {
+    case 1 when x:
+      value = 1;
+    default:
+      value = 3;
+  }
+}
+''');
+    await assertHasAssist('''
+void foo(int a, bool x) {
+  int value;
+  value = switch (a) {
+    1 when x => 1,
+    _ => 3
+  };
+}
+''');
+  }
+
   Future<void> test_empty() async {
     await resolveTestCode('''
 void f(int x) {
@@ -824,4 +868,25 @@
 }
 ''');
   }
+
+  Future<void> test_return_when() async {
+    await resolveTestCode('''
+int foo(int a, bool x) {
+  swit^ch (a) {
+    case 1 when x:
+      return 1;
+    default:
+      return 3;
+  }
+}
+''');
+    await assertHasAssist('''
+int foo(int a, bool x) {
+  return switch (a) {
+    1 when x => 1,
+    _ => 3
+  };
+}
+''');
+  }
 }