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 {