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 = '&nbsp;&nbsp;&nbsp;';
 
   /// 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 = '&rarr;';
-      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) {