Re-throw CaughtExceptionWithFiles when an exception during getAssists().

There is a surge of ConflictingEditException reported, and I don't
know how to reproduce it. We need more details.

Change-Id: I591d6a0e8337258deaf48b4cc56fa9c2f2557104
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/174221
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 3cd4538..49dcb3d 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -214,7 +214,6 @@
       return;
     }
 
-    var changes = <SourceChange>[];
     //
     // Allow plugins to start computing assists.
     //
@@ -227,35 +226,12 @@
       pluginFutures = server.pluginManager
           .broadcastRequest(requestParams, contextRoot: driver.contextRoot);
     }
+
     //
     // Compute fixes associated with server-generated errors.
     //
-    var result = await server.getResolvedUnit(file);
-    server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
-    if (result != null) {
-      var context = DartAssistContextImpl(
-        server.instrumentationService,
-        DartChangeWorkspace(server.currentSessions),
-        result,
-        offset,
-        length,
-      );
-      try {
-        List<Assist> assists;
-        try {
-          var processor = AssistProcessor(context);
-          assists = await processor.compute();
-        } on InconsistentAnalysisException {
-          assists = [];
-        }
+    var changes = await _computeServerAssists(request, file, offset, length);
 
-        assists.sort(Assist.SORT_BY_RELEVANCE);
-        for (var assist in assists) {
-          changes.add(assist.change);
-        }
-        server.requestStatistics?.addItemTimeNow(request, 'computedAssists');
-      } catch (_) {}
-    }
     //
     // Add the fixes produced by plugins to the server-generated fixes.
     //
@@ -271,6 +247,7 @@
     pluginChanges
         .sort((first, second) => first.priority.compareTo(second.priority));
     changes.addAll(pluginChanges.map(converter.convertPrioritizedSourceChange));
+
     //
     // Send the response.
     //
@@ -765,6 +742,52 @@
     return errorFixesList;
   }
 
+  Future<List<SourceChange>> _computeServerAssists(
+      Request request, String file, int offset, int length) async {
+    var changes = <SourceChange>[];
+
+    var result = await server.getResolvedUnit(file);
+    server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
+
+    if (result != null) {
+      var context = DartAssistContextImpl(
+        server.instrumentationService,
+        DartChangeWorkspace(server.currentSessions),
+        result,
+        offset,
+        length,
+      );
+
+      try {
+        List<Assist> assists;
+        try {
+          var processor = AssistProcessor(context);
+          assists = await processor.compute();
+        } on InconsistentAnalysisException {
+          assists = [];
+        } catch (exception, stackTrace) {
+          var parametersFile = '''
+offset: $offset
+length: $length
+      ''';
+          throw CaughtExceptionWithFiles(exception, stackTrace, {
+            file: result.content,
+            'parameters': parametersFile,
+          });
+        }
+
+        assists.sort(Assist.SORT_BY_RELEVANCE);
+        for (var assist in assists) {
+          changes.add(assist.change);
+        }
+
+        server.requestStatistics?.addItemTimeNow(request, 'computedAssists');
+      } catch (_) {}
+    }
+
+    return changes;
+  }
+
   /// Compute and return the fixes associated with server-generated errors.
   Future<List<AnalysisErrorFixes>> _computeServerErrorFixes(
       Request request, String file, int offset) async {