Fix runtime errors in instrumentation log_viewer I encountered these errors while trying the log_viewer on some recent log files. Change-Id: If0207659eae717e4fbba28455ceee8815671f081 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/270801 Commit-Queue: Samuel Rawlins <srawlins@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/tool/instrumentation/log/log.dart b/pkg/analysis_server/tool/instrumentation/log/log.dart index 4a94e36..6c64d02 100644 --- a/pkg/analysis_server/tool/instrumentation/log/log.dart +++ b/pkg/analysis_server/tool/instrumentation/log/log.dart
@@ -78,8 +78,7 @@ /// A log entry representing an Err entry. class ErrorEntry extends GenericEntry { /// Initialize a newly created log entry. - ErrorEntry( - super.index, super.timeStamp, super.entryKind, super.components); + ErrorEntry(super.index, super.timeStamp, super.entryKind, super.components); } /// A log entry representing an Ex entry. @@ -296,9 +295,11 @@ _requestMap[entry.id] = entry; } else if (entry is ResponseEntry) { _responseMap[entry.id] = entry; - var request = _requestMap[entry.id]!; - _pairedEntries[entry] = request; - _pairedEntries[request] = entry; + var request = _requestMap[entry.id]; + if (request != null) { + _pairedEntries[entry] = request; + _pairedEntries[request] = entry; + } } else if (entry is NotificationEntry) { if (entry.isServerStatus) { var analysisStatus = entry.param('analysis'); @@ -379,7 +380,7 @@ static const String singleIndent = ' '; /// The decoded form of the JSON encoded component. - final Map data; + final Map<Object?, Object?> data; /// Initialize a newly created log entry to have the given [timeStamp] and /// [data]. @@ -432,14 +433,14 @@ buffer.write('"'); } else if (object is int || object is bool) { buffer.write(object); - } else if (object is Map) { + } else if (object is Map<Object?, Object?>) { buffer.write('{<br>'); object.forEach((key, value) { var newIndent = indent + singleIndent; buffer.write(newIndent); _format(buffer, newIndent, key as Object); buffer.write(' : '); - _format(buffer, newIndent, value as Object); + _format(buffer, newIndent, value ?? ''); buffer.write('<br>'); }); buffer.write(indent); @@ -818,13 +819,13 @@ int get clientRequestTime => data['clientRequestTime'] as int; /// Return the id field of the request. - String get id => data['id'] as String; + String get id => '${data['id']}'; @override String get kind => 'Req'; /// Return the method field of the request. - String get method => data['method'] as String; + String? get method => data['method'] as String?; /// Return the value of the parameter with the given [parameterName], or /// `null` if there is no such parameter. @@ -845,7 +846,7 @@ ResponseEntry(super.index, super.timeStamp, super.responseData); /// Return the id field of the response. - String get id => data['id'] as String; + String get id => '${data['id']}'; @override String get kind => 'Res';
diff --git a/pkg/analysis_server/tool/instrumentation/page/log_page.dart b/pkg/analysis_server/tool/instrumentation/page/log_page.dart index addd9dc..ca08f2b 100644 --- a/pkg/analysis_server/tool/instrumentation/page/log_page.dart +++ b/pkg/analysis_server/tool/instrumentation/page/log_page.dart
@@ -118,7 +118,7 @@ id = 'req$entryId'; clickHandler = 'highlight(\'req$entryId\', \'res$entryId\')'; icon = '→'; - description = entry.method; + description = entry.method ?? '<no method>'; } else if (entry is ResponseEntry) { var entryId = entry.id; var request = log.requestFor(entry);
diff --git a/pkg/analysis_server/tool/instrumentation/page/stats_page.dart b/pkg/analysis_server/tool/instrumentation/page/stats_page.dart index 9ef7f85..b3e2450 100644 --- a/pkg/analysis_server/tool/instrumentation/page/stats_page.dart +++ b/pkg/analysis_server/tool/instrumentation/page/stats_page.dart
@@ -82,7 +82,9 @@ } else if (entry is RequestEntry) { var method = entry.method; var latency = entry.timeStamp - entry.clientRequestTime; - latencyData.putIfAbsent(method, () => <int>[]).add(latency); + if (method != null) { + latencyData.putIfAbsent(method, () => <int>[]).add(latency); + } if (method == 'completion.getSuggestions') { var response = log.responseFor(entry); if (response != null) {