[observatory] Progress toward static mode compatibility.

Bug: https://github.com/dart-lang/sdk/issues/32503
Change-Id: Ic4390dce8874aab4aaa87fa4153aef668f28738e
Reviewed-on: https://dart-review.googlesource.com/64982
Reviewed-by: Zach Anderson <zra@google.com>
diff --git a/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart b/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart
index 8bc2357..fce8ce3 100644
--- a/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart
+++ b/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart
@@ -13,7 +13,7 @@
   final S.HeapSpace oldSpace;
   final Iterable<M.ClassHeapStats> members;
 
-  AllocationProfile(S.ServiceMap map, {Map<String, List<String>> defaults})
+  AllocationProfile(S.ServiceMap map, {Map/*<String, List<String>>*/ defaults})
       : lastAccumulatorReset = _intString2DateTime(map[_lastAccumulatorReset]),
         lastServiceGC = _intString2DateTime(map[_lastServiceGC]),
         oldSpace = new S.HeapSpace()..update(map['heaps']['old']),
@@ -32,8 +32,8 @@
     return new ClassHeapStats(map);
   }
 
-  static List<M.ClassHeapStats> _convertMembers(/*Iterable<S.ServiceMap>*/ raw,
-      {Map<String, List<String>> defaults}) {
+  static List<M.ClassHeapStats> _convertMembers(Iterable/*<S.ServiceMap>*/ raw,
+      {Map/*<String, List<String>>*/ defaults}) {
     final List<M.ClassHeapStats> members =
         raw.map<ClassHeapStats>(_convertMember).toList();
     if (defaults == null) {
@@ -43,7 +43,7 @@
         new Map.fromIterable(defaults.keys, value: (_) => <ClassHeapStats>[]);
     final Map<String, List<ClassHeapStats>> accumulators =
         <String, List<ClassHeapStats>>{};
-    defaults.forEach((String key, List<String> values) {
+    defaults.forEach((/*String*/ key, /*List<String>*/ values) {
       final classes = aliases[key];
       accumulators.addAll(new Map.fromIterable(values, value: (_) => classes));
     });
@@ -69,7 +69,7 @@
   final int promotedInstances;
   final int promotedBytes;
 
-  ClassHeapStats(S.ServiceMap map)
+  ClassHeapStats(Map map)
       : clazz = map['class'],
         oldSpace = new S.Allocations()..update(map['old']),
         newSpace = new S.Allocations()..update(map['new']),
diff --git a/runtime/observatory/lib/src/elements/cpu_profile_table.dart b/runtime/observatory/lib/src/elements/cpu_profile_table.dart
index 4d3e817..a78e2a4 100644
--- a/runtime/observatory/lib/src/elements/cpu_profile_table.dart
+++ b/runtime/observatory/lib/src/elements/cpu_profile_table.dart
@@ -171,7 +171,7 @@
       _callers.items = const [];
       _callees.items = const [];
     }
-    return [
+    return <Element>[
       new DivElement()
         ..classes = ['profile-trees']
         ..children = <Element>[
@@ -200,7 +200,7 @@
     ];
   }
 
-  Element _createFunction() {
+  HtmlElement _createFunction() {
     final element = new DivElement()
       ..classes = ['function-item']
       ..children = <Element>[
@@ -255,7 +255,8 @@
           ]
       ];
 
-  bool _searchFunction(Pattern pattern, M.ProfileFunction item) {
+  bool _searchFunction(Pattern pattern, itemDynamic) {
+    M.ProfileFunction item = itemDynamic;
     return M.getFunctionFullName(item.function).contains(pattern);
   }
 
@@ -277,7 +278,7 @@
     _r.dirty();
   }
 
-  Element _createCallee() {
+  HtmlElement _createCallee() {
     final element = new DivElement()
       ..classes = ['function-item']
       ..children = <Element>[
@@ -316,7 +317,7 @@
           ]
       ];
 
-  Element _createCaller() {
+  HtmlElement _createCaller() {
     final element = new DivElement()
       ..classes = ['function-item']
       ..children = <Element>[
@@ -403,8 +404,10 @@
     ];
   }
 
-  bool _filterTree(M.FunctionCallTreeNode node) =>
-      node.profileFunction == _selected;
+  bool _filterTree(nodeDynamic) {
+    M.FunctionCallTreeNode node = nodeDynamic;
+    return node.profileFunction == _selected;
+  }
 
   Future _request({bool clear: false, bool forceFetch: false}) async {
     _progress = null;
@@ -452,9 +455,15 @@
     }
     switch (_sortingDirection[table]) {
       case _SortingDirection.ascending:
-        return (a, b) => getter(a).compareTo(getter(b));
+        int sort(M.ProfileFunction a, M.ProfileFunction b) {
+          return getter(a).compareTo(getter(b));
+        }
+        return sort;
       case _SortingDirection.descending:
-        return (a, b) => getter(b).compareTo(getter(a));
+        int sort(M.ProfileFunction a, M.ProfileFunction b) {
+          return getter(b).compareTo(getter(a));
+        }
+        return sort;
     }
   }
 
diff --git a/runtime/observatory/lib/src/elements/field_view.dart b/runtime/observatory/lib/src/elements/field_view.dart
index 413da30..27422a4 100644
--- a/runtime/observatory/lib/src/elements/field_view.dart
+++ b/runtime/observatory/lib/src/elements/field_view.dart
@@ -183,19 +183,18 @@
   }
 
   List<Element> _createMenu() {
-    final menu = [
+    final menu = <Element>[
       new NavTopMenuElement(queue: _r.queue),
       new NavVMMenuElement(_vm, _events, queue: _r.queue),
       new NavIsolateMenuElement(_isolate, _events, queue: _r.queue)
     ];
     if (_library != null) {
-      menu.add(new NavLibraryMenuElement(_isolate, _field.dartOwner,
-          queue: _r.queue));
+      menu.add(new NavLibraryMenuElement(_isolate, _library, queue: _r.queue));
     } else if (_field.dartOwner is M.ClassRef) {
       menu.add(
           new NavClassMenuElement(_isolate, _field.dartOwner, queue: _r.queue));
     }
-    menu.addAll([
+    menu.addAll(<Element>[
       navMenu(_field.name),
       new NavRefreshElement(queue: _r.queue)
         ..onRefresh.listen((e) {
diff --git a/runtime/observatory/lib/src/elements/instance_ref.dart b/runtime/observatory/lib/src/elements/instance_ref.dart
index c706eec..9130e69 100644
--- a/runtime/observatory/lib/src/elements/instance_ref.dart
+++ b/runtime/observatory/lib/src/elements/instance_ref.dart
@@ -245,20 +245,26 @@
     }
     switch (_instance.kind) {
       case M.InstanceKind.closure:
-        return [
-          new DivElement()
-            ..children = <Element>[
-              new SpanElement()..text = 'function = ',
-              anyRef(_isolate, _loadedInstance.closureFunction, _objects,
-                  queue: _r.queue)
-            ],
-          new DivElement()
-            ..children = <Element>[
-              new SpanElement()..text = 'context = ',
-              anyRef(_isolate, _loadedInstance.closureContext, _objects,
-                  queue: _r.queue)
-            ],
-        ];
+        {
+          var members = <Element>[];
+          if (_loadedInstance.closureFunction != null) {
+            members.add(new DivElement()
+              ..children = <Element>[
+                new SpanElement()..text = 'function = ',
+                anyRef(_isolate, _loadedInstance.closureFunction, _objects,
+                    queue: _r.queue)
+              ]);
+          }
+          if (_loadedInstance.closureContext != null) {
+            members.add(new DivElement()
+              ..children = <Element>[
+                new SpanElement()..text = 'context = ',
+                anyRef(_isolate, _loadedInstance.closureContext, _objects,
+                    queue: _r.queue)
+              ]);
+          }
+          return members;
+        }
       case M.InstanceKind.plainInstance:
         return _loadedInstance.fields
             .map<Element>((f) => new DivElement()
diff --git a/runtime/observatory/lib/src/elements/instance_view.dart b/runtime/observatory/lib/src/elements/instance_view.dart
index bf280a3..174af31 100644
--- a/runtime/observatory/lib/src/elements/instance_view.dart
+++ b/runtime/observatory/lib/src/elements/instance_view.dart
@@ -190,7 +190,7 @@
   }
 
   List<Element> _createMenu() {
-    final menu = [
+    final menu = <Element>[
       new NavTopMenuElement(queue: _r.queue),
       new NavVMMenuElement(_vm, _events, queue: _r.queue),
       new NavIsolateMenuElement(_isolate, _events, queue: _r.queue)
@@ -198,7 +198,7 @@
     if (_library != null) {
       menu.add(new NavLibraryMenuElement(_isolate, _library, queue: _r.queue));
     }
-    menu.addAll([
+    menu.addAll(<Element>[
       new NavClassMenuElement(_isolate, _instance.clazz, queue: _r.queue),
       navMenu('instance'),
       new NavRefreshElement(queue: _r.queue)
diff --git a/runtime/observatory/lib/src/elements/memory/allocations.dart b/runtime/observatory/lib/src/elements/memory/allocations.dart
index e5f236d..1d8c4ba 100644
--- a/runtime/observatory/lib/src/elements/memory/allocations.dart
+++ b/runtime/observatory/lib/src/elements/memory/allocations.dart
@@ -129,9 +129,15 @@
     }
     switch (_sortingDirection) {
       case _SortingDirection.ascending:
-        return (a, b) => getter(a).compareTo(getter(b));
+        int sort(M.ClassHeapStats a, M.ClassHeapStats b) {
+          return getter(a).compareTo(getter(b));
+        }
+        return sort;
       case _SortingDirection.descending:
-        return (a, b) => getter(b).compareTo(getter(a));
+        int sort(M.ClassHeapStats a, M.ClassHeapStats b) {
+          return getter(b).compareTo(getter(a));
+        }
+        return sort;
     }
   }
 
@@ -243,7 +249,8 @@
     });
   }
 
-  bool _search(Pattern pattern, M.ClassHeapStats item) {
+  bool _search(Pattern pattern, itemDynamic) {
+    M.ClassHeapStats item = itemDynamic;
     final String value = item.clazz?.name ?? item.displayName;
     return value.contains(pattern);
   }
diff --git a/runtime/observatory/lib/src/elements/memory/graph.dart b/runtime/observatory/lib/src/elements/memory/graph.dart
index c9c3408..30b18ac 100644
--- a/runtime/observatory/lib/src/elements/memory/graph.dart
+++ b/runtime/observatory/lib/src/elements/memory/graph.dart
@@ -199,7 +199,7 @@
     }
   }
 
-  String _formatTimeAxis(num ms) =>
+  String _formatTimeAxis(dynamic ms) =>
       Utils.formatDuration(new Duration(microseconds: ms.toInt()),
           precision: DurationComponent.Seconds);
 
diff --git a/runtime/observatory/lib/src/elements/memory/snapshot.dart b/runtime/observatory/lib/src/elements/memory/snapshot.dart
index 5070374..816a772 100644
--- a/runtime/observatory/lib/src/elements/memory/snapshot.dart
+++ b/runtime/observatory/lib/src/elements/memory/snapshot.dart
@@ -72,7 +72,7 @@
       children = const [];
       return;
     }
-    List<HtmlElement> content;
+    List<Element> content;
     switch (_progress.status) {
       case M.HeapSnapshotLoadingStatus.fetching:
         content = _createStatusMessage('Fetching snapshot from VM...',
@@ -139,7 +139,7 @@
   VirtualTreeElement _tree;
 
   List<Element> _createReport() {
-    final List roots = _getChildrenDominator(_snapshot.dominatorTree);
+    final List roots = _getChildrenDominator(_snapshot.dominatorTree).toList();
     _tree = new VirtualTreeElement(
         _createDominator, _updateDominator, _getChildrenDominator,
         items: roots, queue: _r.queue);
@@ -195,8 +195,8 @@
         .take(kMaxChildren);
   }
 
-  void _updateDominator(
-      HtmlElement element, M.HeapSnapshotDominatorNode node, int depth) {
+  void _updateDominator(HtmlElement element, nodeDynamic, int depth) {
+    M.HeapSnapshotDominatorNode node = nodeDynamic;
     element.children[0].text = Utils.formatSize(node.retainedSize);
     _updateLines(element.children[1].children, depth);
     if (_getChildrenDominator(node).isNotEmpty) {
diff --git a/runtime/observatory/lib/src/elements/native_memory_profiler.dart b/runtime/observatory/lib/src/elements/native_memory_profiler.dart
index 7096aa5..b32f2d2 100644
--- a/runtime/observatory/lib/src/elements/native_memory_profiler.dart
+++ b/runtime/observatory/lib/src/elements/native_memory_profiler.dart
@@ -133,7 +133,7 @@
             _direction = tree.direction = e.element.direction;
           }),
         new BRElement(),
-        tree = new CpuProfileVirtualTreeElement(_vm, _progress.profile,
+        tree = new CpuProfileVirtualTreeElement(null, _progress.profile,
             queue: _r.queue, type: M.SampleProfileType.memory)
       ]);
     }
diff --git a/runtime/observatory/lib/src/elements/nav/notify_exception.dart b/runtime/observatory/lib/src/elements/nav/notify_exception.dart
index 58836f6..3c84af7 100644
--- a/runtime/observatory/lib/src/elements/nav/notify_exception.dart
+++ b/runtime/observatory/lib/src/elements/nav/notify_exception.dart
@@ -88,7 +88,7 @@
   }
 
   void renderGenericException() {
-    List<Node> content;
+    List<Element> content;
     content = <Element>[
       new SpanElement()..text = 'Unexpected exception:',
       new BRElement(),
@@ -97,7 +97,7 @@
       new BRElement()
     ];
     if (stacktrace != null) {
-      content.addAll([
+      content.addAll(<Element>[
         new SpanElement()..text = 'StackTrace:',
         new BRElement(),
         new BRElement(),
@@ -105,7 +105,7 @@
         new BRElement()
       ]);
     }
-    content.addAll([
+    content.addAll(<Element>[
       new SpanElement()..text = '[',
       new AnchorElement(href: Uris.vmConnect())
         ..text = 'Connect to a different VM',
diff --git a/runtime/observatory/lib/src/elements/timeline/dashboard.dart b/runtime/observatory/lib/src/elements/timeline/dashboard.dart
index d7b2b09..dbac222 100644
--- a/runtime/observatory/lib/src/elements/timeline/dashboard.dart
+++ b/runtime/observatory/lib/src/elements/timeline/dashboard.dart
@@ -207,7 +207,8 @@
   Future _refresh() async {
     _flags = await _repository.getFlags(vm);
     _r.dirty();
-    final params = new Map.from(await _repository.getIFrameParams(vm));
+    final params =
+        new Map<String, dynamic>.from(await _repository.getIFrameParams(vm));
     return _postMessage('refresh', params);
   }
 
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 826897c..b6f6fe3 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -2932,8 +2932,9 @@
       fields = null;
     }
     if (map['_nativeFields'] != null) {
-      nativeFields =
-          map['_nativeFields'].map((f) => new NativeField(f['value'])).toList();
+      nativeFields = map['_nativeFields']
+          .map<NativeField>((f) => new NativeField(f['value']))
+          .toList();
     } else {
       nativeFields = null;
     }
@@ -2951,7 +2952,7 @@
     }
     if (map['associations'] != null) {
       associations = map['associations']
-          .map((a) => new MapAssociation(a['key'], a['value']))
+          .map<MapAssociation>((a) => new MapAssociation(a['key'], a['value']))
           .toList();
     } else {
       associations = null;
@@ -4003,7 +4004,8 @@
       return M.ObjectPoolEntryKind.object;
     case 'Immediate':
       return M.ObjectPoolEntryKind.immediate;
-    case 'NativeEntry':
+    case 'NativeFunction':
+    case 'NativeFunctionWrapper':
       return M.ObjectPoolEntryKind.nativeEntry;
   }
   throw new Exception('Unknown ObjectPoolEntryKind ($kind)');
@@ -4393,8 +4395,8 @@
     return null;
   }
 
-  void _processInline(List<ServiceFunction> inlinedFunctionsTable,
-      List<List<int>> inlinedIntervals) {
+  void _processInline(List/*<ServiceFunction>*/ inlinedFunctionsTable,
+      List/*<List<int>>*/ inlinedIntervals) {
     for (var i = 0; i < inlinedIntervals.length; i++) {
       var inlinedInterval = inlinedIntervals[i];
       var start = inlinedInterval[0] + startAddress;
diff --git a/runtime/observatory/lib/utils.dart b/runtime/observatory/lib/utils.dart
index 4167fb5..caace77 100644
--- a/runtime/observatory/lib/utils.dart
+++ b/runtime/observatory/lib/utils.dart
@@ -97,7 +97,7 @@
   }
 
   static String formatSize(bytesDynamic) {
-    int bytes = bytesDynamic;
+    int bytes = bytesDynamic.toInt();
     const int digits = 1;
     const int bytesPerKB = 1024;
     const int bytesPerMB = 1024 * bytesPerKB;
diff --git a/runtime/observatory/tests/observatory_ui/observatory_ui.status b/runtime/observatory/tests/observatory_ui/observatory_ui.status
index 5619242..002abb6 100644
--- a/runtime/observatory/tests/observatory_ui/observatory_ui.status
+++ b/runtime/observatory/tests/observatory_ui/observatory_ui.status
@@ -16,7 +16,6 @@
 isolate/isolate-shared-summary/element_test: CompileTimeError # observatory is not strong clean (Issue 32503)
 isolate_reconnect/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
 megamorphiccache_view/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
-nav/notify/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
 nav/notify_event/element_test: RuntimeError # observatory is not strong clean (Issue 32503)
 nav/notify_exception/connection_exception_test: Timeout, RuntimeError # observatory is not strong clean (Issue 32503)
 nav/notify_exception/exception_test: Timeout, RuntimeError # observatory is not strong clean (Issue 32503)