Send LSP unhandled exceptions to instrumentation service

Change-Id: Id8e876b7144aa98dc7c219b9eec2c140824f9675
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/170427
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <danny@tuppeny.com>
This commit is contained in:
Danny Tuppeny 2020-11-09 20:06:14 +00:00 committed by commit-bot@chromium.org
parent 7e8e2222cd
commit 4c85f1950b

View file

@ -31,6 +31,7 @@ import 'package:analysis_server/src/plugin/plugin_manager.dart';
import 'package:analysis_server/src/protocol_server.dart' as protocol;
import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
import 'package:analysis_server/src/server/diagnostic_server.dart';
import 'package:analysis_server/src/server/error_notifier.dart';
import 'package:analysis_server/src/services/completion/completion_performance.dart'
show CompletionPerformance;
import 'package:analysis_server/src/services/refactoring/refactoring.dart';
@ -43,6 +44,7 @@ import 'package:analyzer/src/context/builder.dart';
import 'package:analyzer/src/context/context_root.dart';
import 'package:analyzer/src/dart/analysis/driver.dart' as nd;
import 'package:analyzer/src/dart/analysis/status.dart' as nd;
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
@ -355,14 +357,16 @@ class LspAnalysisServer extends AbstractAnalysisServer {
/// Logs an exception by sending it to the client (window/logMessage) and
/// recording it in a buffer on the server for diagnostics.
void logException(String message, exception, stackTrace) {
var fullMessage = message;
if (exception is CaughtException) {
stackTrace ??= exception.stackTrace;
message = '$message: ${exception.exception}';
fullMessage = '$fullMessage: ${exception.exception}';
} else if (exception != null) {
message = '$message: $exception';
fullMessage = '$fullMessage: $exception';
}
final fullError = stackTrace == null ? message : '$message\n$stackTrace';
final fullError =
stackTrace == null ? fullMessage : '$fullMessage\n$stackTrace';
// Log the full message since showMessage above may be truncated or
// formatted badly (eg. VS Code takes the newlines out).
@ -375,6 +379,16 @@ class LspAnalysisServer extends AbstractAnalysisServer {
stackTrace is StackTrace ? stackTrace : null,
false,
));
AnalysisEngine.instance.instrumentationService.logException(
FatalException(
message,
exception,
stackTrace,
),
null,
crashReportingAttachmentsBuilder.forException(exception),
);
}
void onOverlayCreated(String path, String content) {